我需要在两列之后排序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