L'identifiant fonctionnerait toujours théoriquement, à condition que l'identifiant ne change jamais...
Je recommanderais d'utiliser un champ d'horodatage dans la structure de la table appelé "date" et d'utiliser "CURRENT_TIMESTAMP" comme valeur par défaut, cela remplira automatiquement la date/heure sur l'enregistrement lors de l'insertion...
Trier par ce champ DESC, limite x
De plus, j'ai rencontré de nombreux cas d'apparition de données erronées grâce au regroupement... Assurez-vous que vos données sont correctes avant d'appliquer ORDER BY et LIMIT
Pour obtenir des publications de l'utilisateur 1 à l'utilisateur 1, il n'est pas nécessaire de regrouper par :
SELECT * FROM posts
WHERE toID=fromID
ORDER BY date DESC LIMIT 3
Pour obtenir des messages de * à user1 :
SELECT * FROM posts
WHERE toID="USER1_ID"
ORDER BY date DESC LIMIT 3
Pour obtenir des messages de * à user1, seuls les utilisateurs uniques :
SELECT * FROM posts
WHERE toID="USER1_ID"
GROUP BY FromID
ORDER BY date DESC LIMIT 3
Parfois, vous rencontrerez le problème où les enregistrements GROUPÉS ne sont pas classés par ORDER BY, car ORDER BY est appliqué au résultat APRÈS l'application du regroupement... Pour trouver une solution :
SELECT * FROM (
SELECT * FROM posts
WHERE toID="USER1_ID"
ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3
Pour obtenir les 3 derniers utilisateurs qui se sont récemment envoyé un message :
SELECT * FROM (
SELECT * FROM posts
WHERE toID=fromID
ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3