2014-10-30 61 views
0

我有兩個sql表:messagesusersMYSQL內部加入(如果語句在SQL代碼?)

messages = 
    message_id, 
    sender_id, 
    recipient_id, 
    conversation_id, 
    message, 
    datetime, 
    read_at 

users = 
    user_id, 
    name, 
    lastname, 
    ... 

現在我想獲得(選擇)每conversation_id一樣,最新的消息:

date(1 latest) - conversation partnerXY - newest message 
date(2 latest) - conversation partnerZY - newest message 

...

這個我已經找到了:

SELECT  
    messages.message_id, 
    messages.sender_id, 
    messages.recipient_id, 
    messages.datetime, 
    messages.message, 
    messages.read_at, 
    users.name, 
    users.lastname  
FROM  
    messages, 
    users  
WHERE  
    (messages.recipient_id = $r_id OR messages.sender_id = $s_id) 
AND  
    messages.sender_id = users.user_id  
GROUP BY  
    messages.conversation_id 
ORDER BY 
    messages.datetime DESC 

但現在namelastname也可以是我的名字,我會l艾克得到相反的名字。在會話中,當前用戶標識被保存。你會很開心!

回答

0

我並不完全確定自己是否明白自己在問什麼,但聽起來您想要爲任何給定的郵件選擇發件人和收件人姓名?嘗試是這樣的:

SELECT 
m.message_id, 
m.message, 
s.name AS sender_name, 
s.lastname AS sender_lastname, 
r.name AS recipient_name, 
r.lastname AS recipient_lastname 

... more columns ... 

FROM messages m 
LEFT JOIN users s ON m.sender_id = s.user_id 
LEFT JOIN users r ON m.recipient_id = r.user_id 

... more conditions ... 
+0

你是我的英雄!非常感謝! – Jannick 2014-10-31 08:42:34

1

我不是100%肯定你所要求的是什麼,但如果你不知道哪種連接類型使用,請參閱本圖片:

sql joins

如果你需要做IF-ELSE檢查,你可以這樣做CASES:

CASE 
    WHEN COLUMN1 LIKE 'Bill' THEN 'Name is Bill' 
    WHEN COLUMN1 LIKE 'James' THEN 'Name is James' 
    WHEN COLUMN1 IS NULL THEN 'Name is not there' 
    ELSE COLUMN2 
END AS RESULT_NAME