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.
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.
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>
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!