我需要在兩列之後排序MySQL表,但不像常規排序。在聊天應用程序,我希望得到的結果通過時間戳字段排序,但也由他們發送SELECT ... ORDER BY field IN(SELECT ...)not working on duplicate field
CREATE TABLE messages (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
sender int(10) unsigned NOT NULL,
message char(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO messages VALUES ('1', '2011-02-28 01:58:24', '3', '1');
INSERT INTO messages VALUES ('2', '2011-02-28 01:58:28', '3', '2');
INSERT INTO messages VALUES ('3', '2011-02-28 01:58:35', '1', '5');
INSERT INTO messages VALUES ('4', '2011-02-28 01:58:36', '2', '7');
INSERT INTO messages VALUES ('5', '2011-02-28 01:58:38', '3', '3');
INSERT INTO messages VALUES ('6', '2011-02-28 01:58:39', '2', '8');
INSERT INTO messages VALUES ('7', '2011-02-28 01:58:40', '1', '6');
INSERT INTO messages VALUES ('8', '2011-02-28 01:58:41', '3', '4');
所以分組:
ORDER BY時間戳,發件人沒用
ORDER BY發件人,時間戳非常好,但它不會首先顯示較早的消息
SELECT timestamp, sender, message FROM messages ORDER BY sender IN (SELECT DISTINCT sender FROM messages ORDER BY timestamp), timestamp;
不起作用,因爲我認爲它必須工作。這裏是我從該查詢預期(OFC是不是我想從這個查詢得到:P):
+---------------------+--------+---------+
| timestamp | sender | message |
+---------------------+--------+---------+
| 2011-02-28 01:58:24 | 3 | 1 |
| 2011-02-28 01:58:28 | 3 | 2 |
| 2011-02-28 01:58:38 | 3 | 3 |
| 2011-02-28 01:58:41 | 3 | 4 |
| 2011-02-28 01:58:35 | 1 | 5 |
| 2011-02-28 01:58:40 | 1 | 6 |
| 2011-02-28 01:58:36 | 2 | 7 |
| 2011-02-28 01:58:39 | 2 | 8 |
+---------------------+--------+---------+
任何想法?鏈接?提示?什麼? 在此先感謝,有任何疑問,歡迎
你能說出什麼查詢應該實現。你說過你想做一個不規則的排序,給出兩個不能做你想做的事情的例子,但是你沒有描述你真正想要的,並且試圖從所提供的表格推斷它是困難的。 – Hamish 2011-02-28 00:22:15
最後一個表是我想得到的,完美查詢的結果:D – SYNCRo 2011-02-28 00:25:13
只需獲取所有郵件,按發件人分組,並按時間戳排序,但未按發件人和時間戳排序 – SYNCRo 2011-02-28 00:26:33