Können WHERE-Klauseln auf ein bestimmtes Feld in MySQL beschränkt werden?
In MySQL filtert die WHERE-Klausel Zeilen basierend auf angegebenen Bedingungen. Es ist jedoch nicht möglich, die Anwendung einer WHERE-Klausel auf ein bestimmtes Feld innerhalb einer Abfrage zu beschränken.
Das Problem verstehen
Im Kontext der Frage wird die Ziel ist es, eine Liste der verfügbaren Kurse und den Anmeldestatus des zugehörigen Benutzers anzuzeigen. Jede Zeile stellt einen Kurs dar und zeigt den Anmeldestatus (userHabilitado) für einen bestimmten Benutzer. Allerdings muss die Benutzer-ID des Benutzers aus der URL übernommen und zum Filtern der Ergebnisse für diesen bestimmten Benutzer verwendet werden.
Lösung: Nicht vollständige Gruppierung nach ausnutzen
Vorher MySQL 5.7 erlaubte eine nicht vollständige Gruppierung nach, was bedeutete, dass Aggregatfunktionen wie group_concat mit nicht aggregierten Spalten (NON AGGS) verwendet werden konnten. Ab MySQL 5.7 ist jedoch die Einstellung ONLY_FULL_GROUP_BY standardmäßig aktiviert, sodass solche Abfragen nicht zulässig sind.
In diesem Fall versucht die Abfrage, userHabilitado zur Liste der angezeigten Spalten hinzuzufügen, die bereits nach Cursorn gruppiert sind .cursoID. Der angezeigte userHabilitado-Wert wird jedoch nicht durch eine WHERE-Klausel gefiltert und zeigt daher unabhängig vom Kurs den ersten gefundenen Wert für diesen Benutzer an.
Problemumgehung: Deaktivieren der nicht vollständigen Gruppierung nach
Eine Problemumgehung besteht darin, ONLY_FULL_GROUP_BY für die spezifische Abfrage zu deaktivieren, indem Sie den Modifikator SQL_CALC_FOUND_ROWS verwenden:
<code class="sql">SET SQL_CALC_FOUND_ROWS = 0;</code>
Dies wird jedoch nicht empfohlen, da es zu potenziellen Abweichungen in den Ergebnissen führen kann und mit verwendet werden sollte Vorsicht.
Das obige ist der detaillierte Inhalt vonKann ich WHERE-Klauseln auf bestimmte Felder in MySQL beschränken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!