2012-01-10 35 views
1

我需要从这3个表中检索数据加入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 numberuser_2等于from_useruser_2等于usersid现在如果只会有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记录

+0

你有主列在用户? – SergeS 2012-01-10 18:37:09

回答

3

你只需要添加另一种“加盟”与第三个表查询:

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

你只需要添加一个新的连接,就像这样:

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 
1
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 
;