如何LEFT JOIN三个具有相同列名的表

时间:2014-07-21 11:46:14

标签: mysql left-join

我有三张桌子左边加入。其中两个人将uid作为用户ID。问题是每次执行查询都需要相同的用户ID。

请检查表结构

-------------------------------------
|Users      |posts      |favorites  |
|-----------|-----------|-----------|
|user_id    |id         |id         |
|username   |title      |uid        |
|password   |post       |post_id    |
|           |uid        |           |
|           |favorites  |           |
-------------------------------------

MySQL查询

SELECT * FROM favorites 
LEFT JOIN users ON users.user_id = favorites.uid 
LEFT JOIN posts ON favorites.posts_id = posts.id
WHERE favorites.uid='$id' and posts.active=1

请注意$ id是个人资料所有者(用户)ID。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果表格如下(我已重命名为user_idpostfavorites列,以便根据我的理解来澄清其角色。

-------------------------------------
|Users      |posts      |favorites  |
|-----------|-----------|-----------|
|id         |id         |id         |
|username   |title      |uid        |
|password   |post_text  |post_id    |
|           |uid        |           |
|           |fav_id     |           |
-------------------------------------

这个sql代码可以用来获得你想要的东西

SELECT * FROM favorites 
LEFT JOIN posts ON  favorites.id = posts.fav_id
LEFT JOIN users ON posts.uid = users.id
WHERE favorites.uid='$id' and posts.active=1

这应该从给定用户ID的三个表中获取最喜欢帖子的所有详细信息。希望它适合你。

答案 1 :(得分:0)

嘿,你可以试试这次吗

SELECT posts.*, favorites.post_id, users.username FROM favorites LEFT JOIN users ON favorites.uid = users.user_id LEFT JOIN posts ON favorites.post_id = posts.id
WHERE users.user_id='$id' and posts.active=1

由于查询中存在拼写错误,我对您的代码进行了一些更改

答案 2 :(得分:0)

此查询可能会解决您的问题。

SELECT * FROM post p
LEFT JOIN (SELECT * FROM users u LEFT JOIN favorites f ON u.user_id = f.id) as tbl1
WHERE p.id=tbl1.post_id and p.uid = $uid and p.active=1