我有一个表,其中包含从1个用户发送到另一个用户的消息。我想知道从不同用户发送或接收的所有消息不一样.Ex:1-2与2-1相同但由于2已经与用户进行了最后一次联系,该消息将显示在顶部,并且名称也是消息从其他人以外发送或接收的用户。还要检查是否有来自同一用户的消息,如1-1。我也需要获取该名称。我非常感谢任何帮助。谢谢你。
码
CREATE TABLE if not exists tblA
(
id int(11) NOT NULL auto_increment ,
sender varchar(255),
receiver varchar(255),
msg varchar(255),
date timestamp,
PRIMARY KEY (id)
);
CREATE TABLE if not exists tblB
(
id int(11) NOT NULL auto_increment ,
sno varchar(255),
name varchar(255),
PRIMARY KEY (id)
);
INSERT INTO tblA (sender, receiver,msg,date ) VALUES
('1', '2', 'buzz ...','2011-08-21 14:11:09'),
('1', '2', 'test ...','2011-08-21 14:12:19'),
('1', '2', 'check ...','2011-08-21 14:13:29'),
('1', '1', 'test2 ...','2011-08-21 14:14:09'),
('2', '1', 'check2 ...','2011-08-21 14:15:09'),
('2', '1', 'test3 ...','2011-08-21 14:16:09'),
('1', '2', 'buzz ...','2011-08-21 14:17:09'),
('1', '2', 'test ...','2011-08-21 14:18:19'),
('1', '2', 'check ...','2011-08-21 14:19:29'),
('1', '1', 'test2 ...','2011-08-21 14:10:09'),
('3', '1', 'check2 ...','2011-08-21 14:21:09'),
('3', '1', 'test3 ...','2011-08-21 14:22:09'),
('3', '2', 'buzz ...','2011-08-21 14:24:09'),
('3', '2', 'test ...','2011-08-21 14:25:19'),
('1', '3', 'check ...','2011-08-21 14:26:29'),
('1', '3', 'test2 ...','2011-08-21 14:27:09'),
('2', '3', 'check2 ...','2011-08-21 14:28:09'),
('2', '3', 'test3 ...','2011-08-21 14:29:09'),
('1', '2', 'check3 ...','2011-08-21 14:23:09');
INSERT INTO tblB (sno, name ) VALUES
('1', 'Aa'),
('2', 'Bb'),
('3', 'Cc');
我正在查看SMS收件箱信息的行,其中数据发送/发送给不同的用户,并显示该名称以及发送的最后一个消息。如何分组?
像这样:http://jesperbylund.com/wp-content/uploads//2011/11/Facebook-Messenger-459x900.png
我想要按照日期订购Aa正在谈话的人员名单。
Bb
Cc
除了Aa之外的一切,因为他是用户。
答案 0 :(得分:1)
我不确定你想要什么,但试试这个:
SELECT t1.sender, t1.receiver, MAX(t1.date)
FROM tblA t1
INNER JOIN (SELECT * FROM tblA ) t2 ON t1.sender = t2.sender
AND t1.receiver = t2.receiver
AND t1.sender <> t2.receiver
GROUP BY t1.sender, t1.receiver
答案 1 :(得分:0)
我完全不明白你的需要,但是你需要使用LEFT JOIN来获得这个名字。
就像这样
SELECT a.msg AS message, b.name AS sender, c.name AS receiver, date FROM tblA a
LEFT JOIN tblB b ON b.sno = a.sender
LEFT JOIN tblB c ON c.sno = a.receiver
WHERE a.sender != a.receiver
ORDER BY date DESC