首先,你要小心你的toid
值那裏。如果將零填充解釋爲八進制數,則零填充可能會造成麻煩:00010
爲9位十進制,而toid=9
很可能不是您想要的。
至於你的信息麻煩,你得到了MySQL中GROUP運算符的正常行爲。考慮下面的簡化表:
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?
+------+--------+------+---------+
當小組fromid
,數據庫崩潰的分組條件匹配到一行的所有行。在這種情況下,您的查詢將得到下面的結果
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 |
+---------+--------+------+---------+
注意,現在的「100」行都有5最大(ID),但是從ID = 1的消息。這是GROUP BY操作的工作原理。你不能變通解決此用一個簡單的查詢,但如果切換到一個子選擇如下,你會得到正確的結果:
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已經張貼了這個問題,並沒有給予足夠的信息。 http://stackoverflow.com/questions/2436342/mysql-query-problem-with-order-by/2436370#2436370 – 2010-03-13 00:22:31
@Sergio請編輯您的原始問題,並提供人們所要求的信息。 – 2010-03-13 00:23:48
好的。我以爲我不能在那裏得到答案,因爲我的問題沒有得到很好的解釋。 – Sergio 2010-03-13 01:00:58