Проблема внутреннего соединения MySQL или другое равное решение - PullRequest
0 голосов
/ 13 апреля 2010

В течение нескольких часов я выяснял, как сделать внутреннее соединение этих таблиц (таблицы для этого вопроса упрощены):

Таблица Сообщение имеет следующие поля:

| id |содержание |

Таблица message_relation имеет следующие поля:

| id |message_id |sender_id |receive_id |

Таблица user имеет следующие поля:

| id |name |

Что я хочу сделать с этой таблицей, это выбрать все сообщения для пользователя по receive_id , но также узнать имя отправителя.Я пробовал что-то вроде:

SELECT *
FROM (
`message_relation`
)
JOIN `message` ON `message`.`id` = `message_relation`.`message_id`
JOIN `user` ON `message_relation`.`receiver_id` = `user`.`id`
WHERE `receiver_id` = '10'

С этим запросом я получаю только имя receive_id, но не могу понять, как найти sender_id в этом запросе.Любая помощь будет оценена!

Ответы [ 2 ]

3 голосов
/ 13 апреля 2010

Вы можете присоединиться к таблице user более одного раза, используя псевдонимы таблицы:

SELECT m.content,
       us.name as 'sender',
       ur.name as 'receiver'
FROM   message_relation mr
JOIN   message m ON (m.id = mr.message_id)
JOIN   user us ON (us.id = mr.sender_id)
JOIN   user ur ON (ur.id = mr.receiver_id);
0 голосов
/ 13 апреля 2010

Заменить «?????» с вашим получателем_ид:

SELECT message.id AS mid, message.content AS mcontent, user.name AS uname
FROM message,message_relation,user
WHERE
message_relation.message_id=message.id
AND message_relation.sender_id=user.id
AND message_relation.receiver_id='?????'

Уф! Не проверено, но вы поняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...