Beim Erstellen einer Abfrage, die eine WHERE-Klausel enthält, ist es möglich, die Bedingung auf ein bestimmtes Feld zu beschränken Feld. In Ihrem Fall versuchen Sie, das Feld „userHabilitado“ für jeden Kurs anzuzeigen, gefiltert nach einem bestimmten Benutzer. Die bereitgestellte Abfrage enthält jedoch nicht die gewünschte WHERE-Klausel.
Vor MySQL 5.7 war eine Einstellung namens ONLY_FULL_GROUP_BY standardmäßig deaktiviert. Dadurch konnte eine Group by-Klausel mit nicht aggregierten Spalten (NON AGGS) kombiniert werden, die nicht Teil der Group by waren. Infolgedessen gibt die Abfrage möglicherweise falsche oder mehrdeutige Daten zurück.
In MySQL 5.7 und höher ist ONLY_FULL_GROUP_BY standardmäßig aktiviert. Dies erfordert, dass alle NON AGGS in die Group by-Klausel aufgenommen werden, um Datenungenauigkeiten zu verhindern.
Betrachten Sie die folgende Beispielabfrage:
<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, GROUP_CONCAT(cursosUsuarios.userID SEPARATOR ',') AS usuarios, MAX(IF(usuarios.userID = 70, cursosUsuarios.userHabilitado, NULL)) AS userHabilitado 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>
Diese Abfrage verwendet die MAX(IF())-Funktion zur Konditionierung der Aggregation des userHabilitado-Felds. Es prüft, ob die usuarios.userID mit der angegebenen Benutzer-ID (70) übereinstimmt und gibt den entsprechenden userHabilitado-Wert zurück, andernfalls wird NULL zurückgegeben. Durch die Aufnahme von MAX() in die GROUP BY-Klausel können wir das bedingte aggregierte Ergebnis für jede CursoID beibehalten.
Das obige ist der detaillierte Inhalt vonWie wende ich eine WHERE-Klausel auf ein bestimmtes Feld in MySQL an, wenn ich GROUP BY verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!