MySQL-Reihenfolge vor Gruppierung nach
In MySQL ordnet die Ausführung einer GROUP BY-Klausel normalerweise die Ergebnisse, nachdem die Gruppen gebildet wurden. Es gibt jedoch Szenarien, in denen Sie die Ergebnisse vor dem Gruppieren ordnen möchten.
Betrachten 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 zu finden und ihn dann zu gruppieren Ergebnisse. Das Problem besteht jedoch darin, dass die Ergebnisse nach dem Gruppieren sortiert werden, nicht davor.
Lösung
Um die Ergebnisse vor dem Gruppieren zu ordnen, können Sie den folgenden Ansatz verwenden:
SELECT wp_posts.* FROM wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' GROUP BY wp_posts.post_author HAVING wp_posts.post_date = MAX(wp_posts.post_date) ORDER BY wp_posts.post_date DESC
Die HAVING-Klausel stellt sicher, dass vor der Gruppierung nur der neueste Beitrag jedes Autors ausgewählt wird.
Alternative Lösung
In Fällen, in denen die HAVING Wenn die Klausel nicht durchführbar ist, wie beispielsweise in Postgres oder SQL Server, können Sie die folgende alternative Lösung verwenden:
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 ORDER BY wp_posts.post_date
Diese Abfrage verwendet eine Unterabfrage, um das maximale Veröffentlichungsdatum für jeden Autor zu ermitteln, und verknüpft es dann mit dem Originaltabelle zum Abrufen der tatsächlichen Beitragsdatensätze.
Das obige ist der detaillierte Inhalt vonWie ordne ich Ergebnisse vor dem Gruppieren in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!