D'abord, vous aurez envie de faire attention à votre valeur toid
Là. Le remplissage par zéro peut causer des problèmes s'il est interprété comme un nombre octal: 00010
est 9 décimal, et toid=9
n'est probablement pas ce que vous avez l'intention. En ce qui concerne vos problèmes de messages, vous obtenez un comportement normal pour l'opérateur GROUP dans MySQL. Considérons le tableau simplifié suivant:
mysql> select * from messages;
+------+--------+------+---------+
| id | fromid | toid | message |
+------+--------+------+---------+
| 1 | 100 | 3 | hi |
| 2 | 100 | 3 | there |
| 3 | 100 | 3 | how |
| 4 | 101 | 3 | did |
| 5 | 100 | 3 | are you | <--the message you want, right?
+------+--------+------+---------+
Lorsque vous regroupez sur fromid
, la base de données fractionne toutes les lignes correspondant aux conditions de regroupement en une seule rangée. Dans ce cas, votre requête obtenir les résultats suivants
mysql> select max(id), fromid, toid, message from messages where toid=3 group by fromid;
+---------+--------+------+---------+
| max(id) | fromid | toid | message |
+---------+--------+------+---------+
| 5 | 100 | 3 | hi |
| 4 | 101 | 3 | did |
+---------+--------+------+---------+
Remarquez maintenant la « 100 » ligne a max (id) de 5, mais le message id = 1. C'est ainsi que fonctionnent les opérations GROUP BY. Vous ne pouvez pas contourner cela avec une simple requête, mais si vous passez à un sous-sélection comme suit, vous obtiendrez les résultats appropriés:
mysql> select id, fromid, toid, message from messages where id in (select max(id) from messages where toid=3 group by fromid);
+------+--------+------+---------+
| id | fromid | toid | message |
+------+--------+------+---------+
| 4 | 101 | 3 | did |
| 5 | 100 | 3 | are you |
+------+--------+------+---------+
OP déjà posté cette question et ne donne pas d'informations suffisantes. http://stackoverflow.com/questions/2436342/mysql-query-problem-with-order-by/2436370#2436370 –
@Sergio S'il vous plaît modifier votre question originale et fournir des informations que les gens ont demandé. –
ok. Je pensais que je ne pouvais pas y répondre parce que ma question n'est pas bien expliquée. – Sergio