Соединение влево на одной и той же таблице умножается на 2 идентификатора с MySQL - PullRequest
1 голос
/ 02 июля 2019

У меня есть SQL-запрос:

SELECT mailbox.*,
       user.picture, user.firstname, user.lastname
FROM mailbox 
LEFT JOIN user ON user.id = mailbox.sender_id
WHERE mailbox.sender_id = 54 OR mailbox.receiver_id = 54

И мне нужно еще LEFT JOIN на receive_id, например:

LEFT JOIN user ON user.id = mailbox.receiver_id

получение информации от пользователя, но я уже получаю информацию отпользователь с моим первым LEFT JOIN

Так как получить информацию из пользовательской таблицы в другой раз?

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Я думаю, что вы хотите:

SELECT m.*,
       us.picture, us.firstname, us.lastname,
       ur.picture, ur.firstname, ur.lastname
FROM mailbox m LEFT JOIN
     user us
     ON us.id = m.sender_id LEFT JOIN
     user ur
     ON ur.id = m.receiver_id 
WHERE 54 IN (m.sender_id, m.receiver_id);

Примечание: вам, вероятно, не нужно LEFT JOIN здесь.Столбцы идентификатора получателя и отправителя предположительно содержат допустимые пользовательские значения.

1 голос
/ 02 июля 2019

Если я правильно понял ваш вопрос, то это должно сработать:

SELECT mailbox.*, u1.picture, u1.firstname, u1.lastname, u2.picture, u2.user.firstname, u2.lastname
FROM mailbox 
LEFT JOIN user u1 ON u1.id = mailbox.sender_id
LEFT JOIN user u2 ON u2.id = mailbox.receiver_id
WHERE mailbox.sender_id = 54 OR mailbox.receiver_id = 54
...