2014-07-21 41 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 
相關問題