Heim >Datenbank >MySQL-Tutorial >Wie kann ich in MySQL ohne Unterabfragen effizient den neuesten Beitrag für jeden Autor abrufen?

Wie kann ich in MySQL ohne Unterabfragen effizient den neuesten Beitrag für jeden Autor abrufen?

DDD
DDDOriginal
2024-12-29 02:22:10384Durchsuche

How to Efficiently Get the Latest Post for Each Author in MySQL Without Subqueries?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn