Объединение 3 столов вместе - PullRequest
1 голос
/ 10 января 2012

Мне нужно получить данные из этих 3 таблиц

users
+----------+-----------+
| username | last_name |
+----------+-----------+
| name     | last name |
+----------+-----------+
messages
+----+---------+-----------+---------+------+---------------------+
| id | to_user | from_user | message | read | sent                |
+----+---------+-----------+---------+------+---------------------+
| 12 |      12 |        10 | 1       |    0 | 2012-01-10 17:06:14 |
+----+---------+-----------+---------+------+---------------------+
all_messages
+----+--------+--------+
| id | user_1 | user_2 |
+----+--------+--------+
|  1 |     10 |     12 |
+----+--------+--------+

Мне нужно выбрать все эти данные, но только там, где user_1 равно random number и user_2 равно from_userи user_2 равно users. id теперь, если бы было только 2 таблицы, у меня нет проблем с выбором нужных мне данных, но я не знаю, как присоединиться к таблице 3, которая users, есть мой токзапрос без users таблица включена:

SELECT `all_messages`.`user_1`, `messages`.*
FROM `all_messages`
JOIN `messages` 
ON (`all_messages`.`user_2` = `messages`.`from_user`) 
WHERE `all_messages`.`user_1` = '12'
ORDER BY `messages`.`id` DESC LIMIT 2

РЕДАКТИРОВАТЬ Спасибо за ваши ответы, он работал отлично,

Но что, если мне нужно получить только последнюю запись изmessages потому что теперь он получает все записи, где all_messages.user_2 = messages.from_user, и мне нужно получить только одну последнюю newest запись

Ответы [ 3 ]

3 голосов
/ 10 января 2012

вы просто добавляете еще одно «соединение» к вашему запросу с третьей таблицей:

SELECT `all_messages`.`user_1`, `messages`.*
FROM `all_messages`
JOIN `messages` 
ON (`all_messages`.`user_2` = `messages`.`from_user`) 
JOIN  `users`
ON (`users`.`id` = `all_messages`.`user_2`)
WHERE `all_messages`.`user_1` = '12'
ORDER BY `messages`.`id` DESC LIMIT 2
1 голос
/ 10 января 2012
SELECT
    users.username,users.last_name,messages.* 
FROM
    (SELECT * FROM all_messages WHERE user_1=12) all_msgs
    INNER JOIN users ON messages.id = users.id
    INNER JOIN messages ON all_msgs.user_2 = messages.from_user
ORDER BY
    messages.id DESC LIMIT 2
;
1 голос
/ 10 января 2012

Вам просто нужно добавить новое объединение, например:

SELECT `all_messages`.`user_1`, `messages`.*
FROM `all_messages`
JOIN `messages` ON (`all_messages`.`user_2` = `messages`.`from_user`) 
JOIN users      ON (...write your condition here...)
WHERE `all_messages`.`user_1` = '12'
ORDER BY `messages`.`id` DESC LIMIT 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...