我正在设置聊天服务。 我的消息表创建如下:
CREATE TABLE message (
fromId int NOT NULL,
toId int NOT NULL,
message text NOT NULL,
timestamp timestamp NOT NULL,
toRead int NOT NULL,
FOREIGN KEY (fromId) REFERENCES users(id) ON DELETE SET NULL,
FOREIGN KEY (toId) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
作为用户,我应该让我已经聊过的所有其他用户。因此我创建了一个sql语句:
SELECT u.name, u.surname, u.id, m.toRead, m.timestamp, m.fromId, m.toId
FROM message m, user_informations u
WHERE (m.toId = '2' AND m.fromId = u.id) OR (m.fromId = '2' AND m.toId = u.id)
GROUP BY concat(m.fromId, m.toId OR m.toId, m.fromId)
ORDER BY m.timestamp LIMIT 10;
只要一个用户只写另一个用户,它就可以工作。如果两人都互相写了,我会得到两个返回的列
'Peter','Tester','1','0','2015-07-27 16:10:11','1','2'
'Peter','Tester','1','0','2015-07-27 17:14:22','2','1'
因为第一个结果中的fromId
不是秒,而是toId
。
如何让语句只返回一行?