MySQL-Reihenfolge vor der Gruppierung nach
Ich muss die Letzte post für jeden Autor und gruppieren Sie dann die Ergebnisse, so dass ich nur eine einzige Letzte post für jeden Autor.
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
Dies ist korrekt Gruppierung der Ausgabe, so erhalte ich nur einen Beitrag pro Autor, aber es ist die Bestellung der Ergebnisse nach der Sie gruppiert wurden und nicht bevor Sie ausgewählt wurden.
Kommentar zu dem Problem
Der Schnellste Weg, dies zu tun ist mit einer inneren Abfrage [
code
] (SELECT wp_posts.* FROM (SELECT * FROM wp_posts, UM DURCH wp_post.post_date DESC) als wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' GROUP BY wp_posts.post_author;) Vielleicht ist es nicht möglichst effiziente, aber es funktioniert. Ich glaube nicht, dass die akzeptierte Antwort auf diese Frage korrekt und haben sich weiter die Frage, über die hier stackoverflow.com/questions/14770671/...
@RobForrest Hey, ich bin froh, update der ausgewählten Antwort 🙂 ich habe diese vor ein paar Jahren so, wenn es einen besseren Weg, ich bin glücklich, zu zeigen Leuten gegenüber die es
InformationsquelleAutor der Frage Tom | 2011-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
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) /* ONLY THE LAST POST FOR EACH AUTHOR */
order by wp_posts.post_date desc
EDIT:
Nachdem einige Kommentare, die ich beschlossen haben, fügen Sie einige zusätzliche Informationen.
Die Firma für die ich arbeite auch verwendet Postgres und insbesondere SQL Server. Diese Datenbanken erlauben nicht, dass solche Abfragen. Also ich weiß, dass es einen anderen Weg, dies zu tun (ich Schreibe die Lösung unten). Man sollte auch wissen, was Sie tun, wenn Sie nicht group by alle Spalten behandelt, in der Projektion oder die Aggregatfunktionen verwenden. Sonst lasst es sein!!
Wählte ich die Lösung oben, weil es eine spezifische Frage. Tom will den letzten post für jeden Autor in eine wordpress-Website. In meinem Kopf ist es unerheblich für die Analyse, wenn ein Autor mehr als einen post pro Sekunde. WordPress sollte auch verbieten, die ihm durch seine spam-doppelpost-Erkennung. Ich weiß aus eigener Erfahrung, dass es einen wirklich signifikanten Vorteil in der Leistung zu tun, eine solche schmutzige Gruppe von mit MySQL. Aber wenn Sie wissen, was Sie tun, dann können Sie es tun! Ich habe solche schmutzigen Gruppen in apps, wo ich bin beruflich verantwortlich für. Hier habe ich die Tabellen mit einigen mio Zeilen, die brauchen 5-15s statt 100++ Sekunden.
Kann hilfreich sein, über einige vor-und Nachteile: http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/debunking-group-by-myths.html
Aber wenn Sie hier ist, mehr als einen post pro Sekunde für einen Autor erhalten Sie dann eine weitere Zeile und nicht nur Letzte.
Nun können Sie das Rad drehen, wieder und Holen Sie die post mit dem höchsten
Id
. Auch hier ist es zumindest nicht garantiert, dass Sie wirklich die letzten.InformationsquelleAutor der Antwort edze
Nicht sicher, ob ich verstehe deine Anforderung korrekt, aber folgende innere Anweisung ruft die Liste der letzten post_date für jeden Autor, und schließt diese wieder mit der wp_posts Tabelle, um einen vollständigen Datensatz.
InformationsquelleAutor der Antwort Lieven Keersmaekers
Ich denke, dass @edze Antwort ist falsch.
In der MySQL-Handbuch können Sie Lesen:
Beiden großen Referenzen:
Sorry, aber ich kann nicht kommentieren die @edze Antwort, da mein Ruf, so ich geschrieben habe, eine neue Antwort.
InformationsquelleAutor der Antwort aanton
Tun, einer GRUPPE nach der REIHENFOLGE DURCH, indem er Ihre Abfrage mit der GROUP BY wie diese:
InformationsquelleAutor der Antwort 11101101b
ist es egal, wenn Sie, um vor oder nach der group-Anweisung, da, um nur bedeutet, dass 213 geht zu 123 oder 321 und nicht mehr. group by nimmt nur EINIGE Eintrag pro Spalte, nicht nur die neuesten. Ich halte Sie arbeiten mit subselects hier wie
InformationsquelleAutor der Antwort Husky110
Was haltet Ihr von diesem?? Scheint zu funktionieren für mich
Bringt es mir, alle Autoren mit den meisten aktualisierte post_date ... haben Sie ein problem erkennen, da?? Ich glaube nicht,
InformationsquelleAutor der Antwort Alex
InformationsquelleAutor der Antwort Mhd Jazaery
Als unser Tisch wurde große Leistung müssen überprüft auch.
Ich überprüfte alle Möglichkeiten, in den Fragen, die hier mit einem PM-system mit 136K-Nachrichten und link-Tabelle mit 83K Zeilen.
Wenn Sie brauchen nur zu zählen, oder nur IDs - Alex ' s Lösung ist die beste.
Wenn Sie andere Felder, die ich brauche zu ändern Husky110 Lösung (an meinem Tisch-design - hier ist nur das Beispiel, nicht überprüft), dass in meinen Tabellen 10x schneller als die Unterabfrage option:
Diese änderung können wählen Sie mehr als einen post (eine für den Benutzer, zum Beispiel), und können modifiziert werden, um andere Lösungen.
Moshe.
InformationsquelleAutor der Antwort
Verwenden Sie den untenstehenden code...
InformationsquelleAutor der Antwort Kausha Mehta
HIER eine einfache Antwort aus
http://www.cafewebmaster.com/mysql-order-sort-group
es wirkte Wunder für mich
InformationsquelleAutor der Antwort Black Bronco