在同一个表上多个JOIN

时间:2018-01-24 13:52:10

标签: mysql sql join

我正在使用Laravel上的消息传递系统,我有以下表格:

USER

user_id | email | password | name | ...
---------------------------------------

CHAT

chat_id | user1_id | user2_id
-----------------------------

MESSAGE

message_id | content | date | user_id | chat_id | ...
------------------------------------------------------

以及我想要做的是,通过消息的日期(从最新到最旧的消息)排序,获取经过身份验证的用户已经开始使用另一个聊天的所有聊天,以及用户的信息他正在和他说话。

我目前正在处理原始SQL请求,然后在Laravel中传递它,这就是我尝试但它没有给出等待的结果:

SELECT user.user_id, user.name, user.surname
FROM user
JOIN chat a
ON user.user_id = a.user1_id
JOIN chat b
ON user.user_id = b.user2_id
WHERE b.chat_id IN
    (SELECT chat_id 
     FROM chat 
     WHERE user1_id = 1 OR user2_id = 1) 
AND user.user_id != 1  

----> (I'm testing with the user that has the ID #1)

如果有人能提供帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用Union获取以下结果:

select a.user1_id, a.chat_id, user.fname, user.lname 
from user
join chat a on a.user2_id = user.user_id and a.user1_id = 1
union 
select b.user2_id, b.chat_id, user.fname, user.lname 
from user
join chat b on b.user1_id = user.user_id and user2_id = 1