Ich habe eine Nachrichten-Tabelle wie folgt:MySQL - Fetching Benutzer, die die neuesten Nachrichten gesendet
Im Grunde, was ich will, ist, ich will n
Benutzer holen, die die neuesten Nachrichten an ein gesendetes Gruppe. Es muss also nach from_user_id
gruppiert und in absteigender Reihenfolge nach id
sortiert werden. Ich habe die folgende Abfrage:
SELECT `users`.`id` AS `user_id`, `users`.`username`, `users`.`image`
FROM `group_messages`
JOIN `users` ON `users`.`id` = `group_messages`.`from_user_id`
WHERE `group_messages`.`to_group_id` = 31
GROUP BY `users`.`id`
ORDER BY `group_messages`.`id` DESC;
Das Problem dabei ist, wenn ich Gruppe von user.id
, die Zeile mit dem kleinsten id
Feld berücksichtigt wird. Dafür bekomme ich nicht in der Reihenfolge, die id
absteigend ist.
Also gibt es eine Möglichkeit, zu gruppieren, unter Berücksichtigung der größten id
? Oder sollte ich es anders angehen?
Vielen Dank im Voraus.
bearbeiten: Ich glaube, ich habe es.
SELECT `x`.`id`, `users`.`id` AS `user_id`, `users`.`username`, `users`.`image`
FROM (SELECT * FROM `group_messages` ORDER BY `group_messages`.`id` DESC) `x`
JOIN `users` ON `users`.`id` = `x`.`from_user_id`
WHERE `x`.`to_group_id` = 31
GROUP BY `users`.`id`
ORDER BY `x`.`id` DESC;
Ich musste nur aus einer bereits geordneten Liste auswählen.
Sie sollten es auf andere Weise angehen. Ein typischer Weg besteht darin, die Aggregation zu verwenden, um die neueste Nachrichten-ID abzurufen und dann den Rest der Felder beizutreten. –
@GordonLinoff können Sie mich erleuchten? – OguzGelal