2016-05-01 37 views
-1

我想獲取所有用戶名和last_messages與當前用戶的對話。MySQL左連接獲取最後的消息和用戶名

我有兩個表:

主題

enter image description here

用戶

id, name

因此,如果當前用戶的ID是1,我應該得到的行對於鮑勃和麥克,但我得到空的結果。你能幫我找到這個錯誤嗎?

SELECT * FROM thread 
LEFT JOIN user 
ON ((thread.user1_id!=current_user AND thread.user1_id=user.id) 
    OR (thread.user2_id!=current_user AND thread.user2_id=user.id)) 
WHERE current_user = 1; 
+0

SQL服務器行試試? MySQL的?甲骨文?什麼DBMS? –

+0

當'current_user'不是'1'時,您的查詢將不返回任何行。 –

+0

http://sqlfiddle.com/#!9/0ab85c/1 - 顯然(?)只加入末尾的名字表 – Strawberry

回答

0

試試這個:

select 
    calls.* 
from User 
left join (
    select 
     User.Name, thread.user2_id as Partner_id 
    from User join thread on thread.user1_id = user.id 
    union all 
    select 
     User.Name, thread.user1_id as Partner_id 
    from User join thread on thread.user2_id = user.id 
) calls 
on calls.partner_id = User.id 
where User.id = 1 

注意如何雙從線程的用戶加入完成 - 一旦針對子查詢通話的雙方作爲一個內部聯接,則第二次作爲外外連接表。

+0

#1054 - '字段列表'中的未知列'Partner_id' – EducateYourself

+0

@EducateYourself:更正爲匹配從SQL SERVER到MySQL的RDBMS規範的變化 –

+0

我得到了用戶名和合作夥伴ID,但我應該從線程表中獲得thread_id和last_message,並且從用戶表 – EducateYourself

0

請這樣

SELECT * FROM thread t 
LEFT JOIN user u1 
ON t.user1_id = u1.id 
LEFT JOIN user u2 
ON t.user2_id = u2.id 
where t.user1_id = '1' or t.user2_id = '1' 

應該得到鮑勃和邁克(主題行1 & 2)

+0

但它不是很挑剔的 – Strawberry