mysql建表语句:CREATE TABLE `wj_msg` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(10) NOT NULL DEFAULT '0',
`fuid` int(10) NOT NULL DEFAULT '0',
`msg` varchar(255) NOT NULL DEFAULT '',
`dt` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
KEY `fuid` (`fuid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;uid为发起聊天的人 fuid为收到信息的一方,都是userID. dt 为聊天时间id uid fuid msg dt
1 1 2 ****** 2013-05-14 07:10:08
2 1 3 ****** 2013-05-14 07:14:24
3 2 1 ****** 2013-05-14 07:15:00
4 2 3 ****** 2013-05-14 07:15:00
5 4 3 ****** 2013-05-14 07:15:00
6 1 6 ****** 2013-05-14 07:16:09
7 6 1 ****** 2013-05-14 07:20:55
8 7 1 ****** 2013-05-14 07:29:32需要查询 userID 为1的聊天记录.并且只取每个回话的最后一条(id较大者 或者 时间靠后的)
查询结果应该为:2 1 3 ****** 2013-05-14 07:14:24
3 2 1 ****** 2013-05-14 07:15:00
7 6 1 ****** 2013-05-14 07:20:55
8 7 1 ****** 2013-05-14 07:29:32
在此先行谢过了!
mysql sqlMySQLSQL
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(10) NOT NULL DEFAULT '0',
`fuid` int(10) NOT NULL DEFAULT '0',
`msg` varchar(255) NOT NULL DEFAULT '',
`dt` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
KEY `fuid` (`fuid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;uid为发起聊天的人 fuid为收到信息的一方,都是userID. dt 为聊天时间id uid fuid msg dt
1 1 2 ****** 2013-05-14 07:10:08
2 1 3 ****** 2013-05-14 07:14:24
3 2 1 ****** 2013-05-14 07:15:00
4 2 3 ****** 2013-05-14 07:15:00
5 4 3 ****** 2013-05-14 07:15:00
6 1 6 ****** 2013-05-14 07:16:09
7 6 1 ****** 2013-05-14 07:20:55
8 7 1 ****** 2013-05-14 07:29:32需要查询 userID 为1的聊天记录.并且只取每个回话的最后一条(id较大者 或者 时间靠后的)
查询结果应该为:2 1 3 ****** 2013-05-14 07:14:24
3 2 1 ****** 2013-05-14 07:15:00
7 6 1 ****** 2013-05-14 07:20:55
8 7 1 ****** 2013-05-14 07:29:32
在此先行谢过了!
mysql sqlMySQLSQL
6 1 6 ****** 2013-05-14 07:16:09
7 6 1 ****** 2013-05-14 07:20:55
因为之后, 6 跟 1回复了.所以只取最后的那条 7
from wj_msg t
where (uid=1 or fuid=1)
and not Exists (select 1 from wj_msg where (uid=t.uid and fuid=t.fuid or fuid=t.uid and uid=t.fuid ) and id>t.id)
FROM ttg a
WHERE (a.uid=1 OR a.fuid=1)
AND NOT EXISTS
(SELECT 1 FROM ttg WHERE ((uid=a.uid AND fuid=a.fuid) OR (fuid=a.uid AND uid=a.fuid)) AND a.dt<dt)