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

php mysql Group By, um den neuesten Datensatz zu erhalten, nicht den ersten Datensatz

Wenn Sie Attribute auswählen, die nicht in der Gruppenklausel verwendet werden und keine Aggregate sind, ist das Ergebnis nicht spezifiziert. D.h. Sie wissen nicht, aus welchen Zeilen die anderen Attribute ausgewählt werden. (Der SQL-Standard erlaubt solche Abfragen nicht, aber MySQL ist entspannter).

Die Abfrage sollte dann z.B. geschrieben werden. als

SELECT post_id, forum_id, topic_id
FROM posts p
WHERE post_time =
  (SELECT max(post_time) FROM posts p2
   WHERE p2.topic_id = p.topic_id
   AND p2.forum_id = p.forum_id)
GROUP BY forum_id, topic_id, post_id
ORDER BY post_time DESC
LIMIT 5;

oder

SELECT post_id, forum_id, topic_id FROM posts
NATURAL JOIN
(SELECT forum_id, topic_id, max(post_time) AS post_time
 FROM posts
 GROUP BY forum_id, topic_id) p
ORDER BY post_time
LIMIT 5;