Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie zeige ich die benutzerspezifische Kursverfügbarkeit mit bedingten WHERE-Klauseln in MySQL an?

Patricia Arquette
Freigeben: 2024-11-06 09:38:02
Original
454 Leute haben es durchsucht

How to Display User-Specific Course Availability with Conditional WHERE Clauses in MySQL?

Bedingte WHERE-Klauseln für bestimmte Felder in MySQL verwenden

Problembeschreibung

In einer MySQL-Datenbank mit mehreren Tabellen für Studenten, Kurse und Einschreibungen, Ziel ist es, eine Liste der verfügbaren Kurse anzuzeigen, für die sich Studierende anmelden können. Die Anforderung besteht darin, das Feld „userHabilitado“ nur für einen bestimmten Benutzer anzuzeigen, um sicherzustellen, dass die Werte den entsprechenden Kursen korrekt zugeordnet sind. Die aktuelle Abfrage gibt jedoch falsche UserHabilitado-Werte zurück.

MySQL-Einschränkungen und -Lösungen

Vor MySQL 5.7 erlaubte das Standardverhalten eine nicht vollständige Gruppierung nach Abfragen, wobei einige nicht aggregierte (NICHT AGGS )-Spalten könnten außerhalb der Group-By-Klausel eingefügt werden. In MySQL 5.7 und höher ist die Einstellung ONLY_FULL_GROUP_BY jedoch standardmäßig aktiviert. Dies erfordert, dass alle NON AGGS Teil der Group by-Klausel sind, sonst tritt ein Fehler auf.

In der angegebenen Abfrage ist das Feld „userHabilitado“ in der Group by-Klausel enthalten, aber die WHERE-Klausel filtert auf der Grundlage des Ganzen Cursor-Tabelle anstelle eines bestimmten Benutzers. Um dies zu beheben, erlaubt MySQL keine bedingten WHERE-Klauseln innerhalb der Gruppierung nach Feldern.

Vorgeschlagene Lösung

Um diese Einschränkung zu beheben, wird empfohlen, eine Unterabfrage zu verwenden, um die Cursos-Tabelle basierend darauf zu filtern den spezifischen Benutzer und verknüpfen Sie dann das Ergebnis mit der Hauptabfrage. Dadurch wird sichergestellt, dass das Feld „userHabilitado“ nur für den ausgewählten Benutzer ausgewertet wird:

<code class="sql">SELECT 
cursos.cursoID AS idcurso, 
cursos.estadoCurso,
(
    SELECT userHabilitado 
    FROM cursosUsuarios 
    WHERE cursosUsuarios.userID = 70 AND cursosUsuarios.cursoID = cursos.cursoID
) AS 'ok',                              
GROUP_CONCAT(cursosUsuarios.userID SEPARATOR ',') AS 'usuarios'
FROM cursos 
LEFT JOIN cursosUsuarios
ON cursos.cursoID = cursosUsuarios.cursoID
LEFT JOIN usuarios
ON cursosUsuarios.userID = usuarios.userID
WHERE cursos.estadoCurso='abierto'
GROUP BY cursos.cursoID;</code>
Nach dem Login kopieren

In der Unterabfrage wird die Tabelle „cursosUsuarios“ gefiltert, um den Wert „userHabilitado“ für den spezifischen Benutzer (in diesem Fall 70) abzurufen passende cursoID. Dieser Wert wird dann mit der Hauptabfrage verknüpft, um sicherzustellen, dass das richtige userHabilitado-Feld dem entsprechenden Kurs zugeordnet ist.

Das obige ist der detaillierte Inhalt vonWie zeige ich die benutzerspezifische Kursverfügbarkeit mit bedingten WHERE-Klauseln in MySQL an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage