2014-01-25 22 views
4

我有一個表格,其中有一個用戶發送給另一個用戶。我想知道從不同用戶發送或接收的所有消息都不相同.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'); 

我期待在哪裏數據來自短信收件箱封郵件/發送給不同的用戶,到最後味精沿着那個名字行發送的displayed.How做我組?

這樣的:

http://jesperbylund.com/wp-content/uploads//2011/11/Facebook-Messenger-459x900.png


我想要的人AA是交談按日期排序列表。

Bb 
Cc 

除了Aa之外的一切,因爲他是用戶。

+1

請直接添加的所有相關信息到你的問題。特別是SQLFiddle往往有時會失敗,我們希望爲將來的訪問者保留文章。 –

+0

更新了查詢。 – jason

+1

期望的結果集是什麼樣的? – Strawberry

回答

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 
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 
相關問題