2014-09-18 106 views
0

我在mysql數據庫3個表MySQL的聯接工作不正常

chat 
user1, user2, chat_key 

chat_seen 
msgid, userid, viewed 

users 
username, status, key 

所以我嘗試以顯示聊天的用戶,命令他們在網上看到,然後郵件。但它不工作。這是我迄今,四隻得到了它與聊天和用戶的工作,我不知道如何看到

("SELECT u.random, u.status, c.chat_key, c.seen, u.username 
            FROM chat c, users u 
            WHERE CASE 
            WHEN c.user1 = ? 
            THEN c.user2 = u.random 
            WHEN c.user2 = ? 
            THEN c.user1= u.random 
            END 
            AND (
            c.user1 = ? 
            OR c.user2 = ?) 
            ORDER BY u.status DESC LIMIT 50"); 

聊天添加順序,這樣的結果應該是

username - online - (2 messages) 
username - online - (1 message) 

username - offline - (20 messages) 
username - offline - (2 messages) 
username - offline - (o messages) 

在那一刻,我有

username - online - (0 messages) 
username - online - (0 messages) 
username - offline - (2messages) 
username - offline - 20 messages) 
+1

您可以創建一個SQL小提琴(http://sqlfiddle.com/),因此我們可以看到數據 – 2014-09-18 21:07:37

+0

編寫標準的'JOIN'語法,而不是過去20多年來語法過時的語法。 – 2014-09-19 15:06:35

回答

0

試試下面這個查詢:

("SELECT 
u.random, 
u.status, 
c.chat_key, 
c.seen, 
u.username 

FROM chat c, users u 

WHERE 
(c.user1 = ? AND c.user2 = u.random) 
OR 
(c.user2 = ? AND c.user1 = u.random) 
AND 
(c.user1 = ? OR c.user2 = ?) 

ORDER BY u.status DESC LIMIT 50"); 

讓我知道它是否有效。 :D

+0

嘿,是的,但即時通訊嘗試通過chat_seen命令查看 – 2014-09-18 22:24:08

+0

在這種情況下,您可以簡單地將最後一行更改爲: ORDER BY c.status,c.seen DESC LIMIT 50「) – smzsmzsmz 2014-09-18 22:26:33

+0

iv試過但顯示空白。我需要它說select * from chat seen where r.msgid = c.chat_key and r.userid =?ORDER BY u.status,r.viewed – 2014-09-18 22:31:01