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

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

DDD
Freigeben: 2024-12-15 20:10:14
Original
487 Leute haben es durchsucht

How to Efficiently Retrieve the Latest Post for Each Author in MySQL?

Neuesten Beitrag pro Autor in MySQL abrufen: Verwenden von JOIN statt Sortieren nach vor Gruppieren nach

Beim Bemühen, den neuesten Beitrag für jeden abzurufen Autor in einer Datenbank führt der anfängliche Ansatz mit einer ORDER BY-Klausel vor GROUP BY in MySQL oft zu unerwünschten Ergebnissen. Allerdings kann die Verwendung einer Unterabfrage zum Sortieren von Zeilen vor dem Gruppieren eine mögliche Lösung sein.

Warum Sortieren nach vor Gruppieren nach problematisch sein kann

Betrachten Sie die Beispielabfrage:

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
Nach dem Login kopieren

Während diese Abfrage darauf abzielt, Beiträge nach Autor zu gruppieren und für jeden den neuesten Beitrag zurückzugeben, kann sie fehlschlagen, wenn es mehrere Beiträge mit demselben Beitrag gibt post_date. In solchen Fällen wird die Reihenfolge, in der Beiträge innerhalb jeder Autorengruppe zurückgegeben werden, unvorhersehbar, was zu inkonsistenten Ergebnissen führt.

Verwenden einer Unterabfrage zur Lösung des Problems

Der Vorschlag Die Lösung für dieses Problem besteht darin, eine Unterabfrage wie folgt zu verwenden:

SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author 
Nach dem Login kopieren

Durch die Verwendung dieser Unterabfrage werden Beiträge zunächst nach ihrer Reihenfolge sortiert post_date in absteigender Reihenfolge. Die resultierende Unterabfragetabelle dient dann als Quelle für die Hauptabfrage und stellt sicher, dass die neuesten Beiträge vor der Gruppierung oben in jeder Autorengruppe platziert werden.

Ein alternativer Ansatz mit JOIN

Ein weiterer effektiver Ansatz zum Abrufen des neuesten Beitrags pro Autor ist die Verwendung einer JOIN-Operation. Die folgende Abfrage veranschaulicht diese Methode:

SELECT p1.* 
FROM wp_posts p1
INNER JOIN
(
    SELECT max(post_date) MaxPostDate, post_author
    FROM wp_posts
    WHERE post_status='publish'
       AND post_type='post'
    GROUP BY post_author
) p2
  ON p1.post_author = p2.post_author
  AND p1.post_date = p2.MaxPostDate
WHERE p1.post_status='publish'
  AND p1.post_type='post'
order by p1.post_date desc
Nach dem Login kopieren

Diese Abfrage umfasst zwei Schritte:

  1. Eine Unterabfrage ermittelt das maximale Post_Datum und den entsprechenden Post_Autor für jeden Autor.
  2. Die Hauptabfrage verknüpft die Tabelle mit Beiträgen mit dem Ergebnis der Unterabfrage sowohl für post_date als auch für post_author und ruft so effektiv jeweils den neuesten Beitrag ab Autor.

Fazit

Während die Verwendung einer Unterabfrage zum Sortieren von Zeilen vor dem Gruppieren eine effektive Lösung sein kann, um den neuesten Beitrag pro Autor abzurufen, ist dies nicht der Fall einziger Ansatz verfügbar. Die JOIN-Operation bietet eine alternative Methode, die sowohl effizient ist als auch zuverlässige Ergebnisse liefert.

Das obige ist der detaillierte Inhalt vonWie kann ich den neuesten Beitrag für jeden Autor in MySQL effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage