2014-07-21 39 views
-3

我有三个左连接的表。他们中的两个用户名为uid。问题是每次执行查询时都会使用相同的用户标识。如何向左加入三个具有相同列名的表

请检查表结构

------------------------------------- 
|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为业主的个人资料(用户)的标识。任何帮助将不胜感激。

+0

'favorites.photo_id'是一个错字,对不对? –

+0

@juergend对不起,这只是一个错字。我在这里编辑。 – maxlk

+2

你是什么意思?*每次查询执行它需要相同的用户ID *? –

回答

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从三个表中收到所有最喜欢的帖子的详细信息。希望对你有效。

+0

终于谢谢它的工作只需要做一些错字修复。非常感谢。 – maxlk

+0

乐意帮忙:-) –

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 

由于有在查询一个错字和我进行了一些改动你的代码

+0

尝试过,但似乎没有工作。 – maxlk

+0

@maxlk我已经做了一些更改,你可以请现在尝试 – Veerendra

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 
相关问题