MySQL-Reihenfolge vor Group By
In MySQL ist es wichtig zu beachten, wenn eine Abfrage ausgeführt wird, die sowohl die ORDER BY- als auch die GROUP BY-Klausel umfasst dass die ORDER BY-Klausel nach der GROUP BY-Klausel angewendet wird. Das bedeutet, dass die Ergebnisse zunächst gruppiert und dann sortiert werden, was möglicherweise nicht das gewünschte Verhalten ist.
Problem:
Bedenken Sie die folgende Abfrage:
SELECT wp_posts.* FROM wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' GROUP BY wp_posts.post_author ORDER BY wp_posts.post_date DESC
Diese Abfrage zielt darauf ab, den neuesten Beitrag für jeden Autor abzurufen und die Ergebnisse nach Autor zu gruppieren. Allerdings wird die ORDER BY-Klausel nach der GROUP BY-Klausel angewendet, was dazu führt, dass die Ergebnisse nach der Gruppierung geordnet werden.
Lösung:
Um dieses Problem zu beheben Bei diesem Problem kann die Abfrage geändert werden, um die Sortierung vor der Gruppierung durchzuführen:
SELECT wp_posts.* FROM wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' ORDER BY wp_posts.post_date DESC GROUP BY wp_posts.post_author
Diese überarbeitete Abfrage sortiert die Ergebnisse zunächst nach Veröffentlichungsdatum in absteigender Reihenfolge, bevor die Gruppierung nach Autor durchgeführt wird. Das Ergebnis ist, dass der neueste Beitrag für jeden Autor abgerufen und an erster Stelle im Ergebnissatz platziert wird.
Alternative Lösung (für Nicht-MySQL-Datenbanken):
In Bei Datenbanken, die das Sortieren vor dem Gruppieren nicht unterstützen, wie etwa SQL Server und PostgreSQL, kann eine alternative Lösung verwendet werden:
SELECT wp_posts.* FROM wp_posts JOIN ( SELECT g.post_author MAX(g.post_date) AS post_date FROM wp_posts AS g WHERE g.post_status='publish' AND g.post_type='post' GROUP BY g.post_author ) AS t ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date
Diese Abfrage verwendet eine Unterabfrage, um das maximale Veröffentlichungsdatum für jeden Autor zu ermitteln, und verknüpft dieses dann Ergebnissatz mit der Haupttabelle wp_posts, um die tatsächlichen Beitragsdaten abzurufen. Beachten Sie, dass diese Lösung möglicherweise mehrere Zeilen für Autoren mit mehreren Beiträgen am selben Datum zurückgibt, sodass je nach spezifischen Anforderungen möglicherweise eine zusätzliche Filterung erforderlich ist.
Das obige ist der detaillierte Inhalt vonWarum wird die ORDER BY-Klausel nach der GROUP BY-Klausel in MySQL angewendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!