Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL wählt die neuesten Beiträge aus Tabellen aus

Das ID-Ding würde theoretisch immer noch funktionieren, vorausgesetzt, dass sich die IDs nie ändern ...

Ich würde empfehlen, ein Zeitstempelfeld in der Tabellenstruktur mit dem Namen "Datum" zu verwenden und "CURRENT_TIMESTAMP" als Standardwert zu verwenden. Dadurch werden Datum und Uhrzeit beim Einfügen automatisch in den Datensatz eingetragen ...

Sortieren nach diesem Feld DESC, Limit x

Außerdem habe ich viele Fälle erlebt, in denen aufgrund der Gruppierung falsche Daten angezeigt wurden ... Stellen Sie sicher, dass Ihre Daten korrekt sind, bevor ORDER BY und LIMIT angewendet werden

Um Beiträge von Benutzer1 zu Benutzer1 zu erhalten, ist keine Gruppierung erforderlich nach:

SELECT * FROM posts 
WHERE toID=fromID
ORDER BY date DESC LIMIT 3

Um Posts von * an Benutzer1 zu bekommen:

SELECT * FROM posts 
WHERE toID="USER1_ID"
ORDER BY date DESC LIMIT 3

Um Beiträge von * an Benutzer1 zu erhalten, nur eindeutige Benutzer:

SELECT * FROM posts 
WHERE toID="USER1_ID"
GROUP BY FromID
ORDER BY date DESC LIMIT 3

Manchmal werden Sie auf das Problem stoßen, dass GRUPPIERTE Datensätze nicht nach ORDER BY geordnet sind, da ORDER BY auf das Ergebnis angewendet wird, NACHDEM die Gruppierung angewendet wurde... Um eine Problemumgehung zu erreichen:

SELECT * FROM (
  SELECT * FROM posts 
  WHERE toID="USER1_ID"
  ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3

So erhalten Sie die letzten 3 Benutzer, die sich selbst zuletzt einen Beitrag gesendet haben:

SELECT * FROM (
  SELECT * FROM posts 
  WHERE toID=fromID
  ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3