Bonjour, pour faire simple j'ai une table users qui comptiens tous les utilisateurs, une table friends_relationships qui permettent de savoir quel utilisateur est ami avec qui et enfin une table messages qui comptiens les messages entre les utilisateurs.
Bons en gros j'aimerais afficher une liste avec les utilisateurs qui sont amis avec moi, afficher le dernier message envoyer et les trier par la date des derniers messages envoyer
Donc j'arrive à afficher les utilisateurs amis et le dernier message envoyer.
Maintenant si j'ai plus 1 utilisateur le problème est que le premier de la liste ne sera pas forcément le dernier message envoyer.
J'ai essayé pas mal de choses comme de grouper les utilisateurs d'un même ID et de récupéré la valeur date la plus haute avec un MAX() mais sans succès.
J'espère que vous pourriez m'aider.
En fait j'ai besoin d'en récupérer plusieurs, voici ma requête si ça peut aider.
Avec cette requête j'obtiens juste les derniers messages de l'autre utilisateur même si j'ai envoyé un message, sa trie bien par la date mais le message ne correspond pas à la date c'est bizarre je ne comprends rien.
$sql = "
SELECT
friends_relationships.accept,
users.id,
users.first_name,
users.online,
messages.user_id1,
messages.user_id2,
messages.content,
MAX(messages.created_at) as created_at
FROM friends_relationships
LEFT JOIN users
ON friends_relationships.user_id2 = users.id OR friends_relationships.user_id1 = users.id
LEFT JOIN messages
ON friends_relationships.user_id1 = messages.user_id1 OR friends_relationships.user_id2 = messages.user_id2 OR friends_relationships.user_id2 = messages.user_id1 OR friends_relationships.user_id2 = messages.user_id1
WHERE (friends_relationships.user_id1 = :user OR friends_relationships.user_id2 = :user)
AND (messages.user_id1 = :user OR messages.user_id2 = :user)
AND users.active = '1'
AND friends_relationships.accept = '1'
AND users.id != :user
AND messages.user_id1 != :user
GROUP BY messages.user_id1
ORDER BY MAX(messages.created_at) DESC
";
$q = $db->prepare($sql);
$q->execute([
'user' => get_session('user_id')
]);
ça retourne :
Array
(
[0] => stdClass Object
(
[accept] => 1
[id] => 2
[first_name] => Enora
[online] => 2018-08-24 15:02:16
[user_id1] => 2
[user_id2] => 1
[content] => Salut toi :)
[created_at] => 2018-08-24 15:01:52
)
[1] => stdClass Object
(
[accept] => 1
[id] => 3
[first_name] => Jean
[online] => 2018-08-24 15:17:01
[user_id1] => 3
[user_id2] => 1
[content] => Salut :)
[created_at] => 2018-08-24 03:18:29
)
)
Et voilà ma base de données :
Dans l'exemple je suis l'ID 1 et les 2 autres ID sont amis avec moi si on regarde les derniers messages envoyer et le résultat du content et created_at ça ne correspondent pas.