Comment récupérer le dernier message du groupe de chaque utilisateur à l'aide de GROUP BY
Dans votre base de données, vous avez une table nommée "messages" contenant ce qui suit colonnes :
Votre objectif est d'extraire le dernier message de chaque utilisateur groupe. Par exemple, cela ressemble à la liste de messages que vous voyez dans votre boîte de réception Facebook avant de cliquer sur une conversation spécifique.
Au départ, vous avez essayé d'utiliser la requête suivante, qui regroupe les messages selon la colonne from_id :
SELECT * FROM messages GROUP BY from_id
Cependant, vous avez remarqué que cette requête renvoie le message le plus ancien au lieu du dernier.
Pour surmonter cette limitation, vous devez déterminer les dernières valeurs d'horodatage pour chaque groupe de messages à l’aide d’une sous-requête. Ensuite, joignez cette sous-requête à la table principale "messages" pour filtrer uniquement les derniers messages :
SELECT t1.* FROM messages t1 JOIN ( SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id ) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
Cette requête modifiée identifie efficacement les derniers enregistrements de chaque groupe, vous fournissant les résultats souhaités.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!