Heim >Datenbank >MySQL-Tutorial >Wie kann ich in MySQL ohne Unterabfragen effizient den neuesten Beitrag für jeden Autor abrufen?
MySQL Sortieren nach vor Gruppieren nach: Ein alternativer Ansatz
Das Sortieren von Zeilen vor dem Gruppieren kann in MySQL eine Herausforderung sein, insbesondere wenn die gewünschte Reihenfolge vorliegt nicht durch die nachfolgende Gruppe garantiert. Obwohl die Verwendung einer Unterabfrage eine gängige Lösung ist, ist sie möglicherweise nicht immer der optimale Ansatz.
Im vorgestellten Szenario besteht das Ziel darin, den neuesten Beitrag für jeden Autor aus der Tabelle wp_posts abzurufen. Die bereitgestellten Abfragen, einschließlich der als „die aktuell akzeptierte Antwort“ beschriebenen, liefern nicht durchweg die erwarteten Ergebnisse.
Eine alternative Lösung, die dieses Problem behebt, ohne auf eine Unterabfrage zurückzugreifen, besteht darin, eine Kombination von Fensterfunktionen zu nutzen und eine Selbstverknüpfung:
WITH LatestPostsPerAuthor AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY post_author ORDER BY post_date DESC) AS rn FROM wp_posts WHERE post_status='publish' AND post_type='post' ) SELECT a.* FROM LatestPostsPerAuthor a JOIN LatestPostsPerAuthor b ON a.rn = b.rn AND a.post_author = b.post_author GROUP BY a.post_author ORDER BY a.post_date DESC;
Diese Abfrage verwendet die Fensterfunktion ROW_NUMBER(), um Beiträgen basierend auf ihrem Post_Datum innerhalb jeder Autorengruppe eine Rangfolge zuzuweisen. Der Self-Join stellt dann sicher, dass nur die Zeilen mit dem höchsten Rang (d. h. die neuesten Beiträge) zum Gruppieren und Ordnen beibehalten werden.
Mit diesem Ansatz kann das gewünschte Ergebnis ohne den Overhead eines erreicht werden Unterabfrage, die genaue und konsistente Ergebnisse für das gegebene Szenario liefert.
Das obige ist der detaillierte Inhalt vonWie kann ich in MySQL ohne Unterabfragen effizient den neuesten Beitrag für jeden Autor abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!