2013-07-08 26 views
0

我目前正在與一組4人在一個小社交網絡上工作。我目前正在處理這個Feed,並且遇到了一個小問題。MySQL:Feed帖子顯示次數太多

我基本上有一個想法,爲什麼這個問題正在發生,但我不知道我應該如何解決它。

我有兩張桌子。 1個帖子本身(稱爲posts),另一個用於用戶朋友(稱爲users_friends)。

帖子表: This is the posts table.

users_friends表:

This is the users_friends table

JOIN這兩個表,這樣我可以只顯示你是朋友與用戶的帖子。

我的查詢是這樣的:

SELECT * 
FROM posts 
JOIN users_friends 
ON posts.username = users_friends.friend 
OR posts.username = '{$db['username']}' 
WHERE users_friends.user = '{$db['username']}' 
ORDER BY timestamp DESC 

$db['username'] =登錄的用戶名

因爲我的用戶,shawn31313,在users_friends表兩次出現時,每個崗位加倍。使用此查詢的結果是:

enter image description here
我不知道如何解決此問題。這是我第一次使用JOIN,我相當新的MySQL一般,所以我不知道現在要做什麼。謝謝你的幫助。

回答

0

我認爲你的查詢存在一些問題。當我看着你的數據庫結構,然後我可以看到郵政表中有用戶名列。該用戶名是發佈評論的用戶,對嗎?如果是這樣,那麼你只需要檢查該用戶是否在你的朋友列表中。

,你可以這樣做

SELECT * 
FROM POSTs 
WHERE USERNAME IN (SELECT FRIENDS FROM USER_FRIENDS WHERE USER = 'shawn31313' union all select 'shawn31313') 

更多更快的查詢將是:

SELECT * 
FROM POSTs AS A INNER JOIN (SELECT FRIENDS FROM USER_FRIENDS WHERE USER = 'shawn31313' union all select 'shawn31313') AS B ON A.USERID = B.FRIENDS 

的邏輯是找到你所有的朋友,然後找到那些所有的職位。

+0

沒有任何方法的工作。首先,所有的名字都是錯誤的。沒有'後'表...有一個'職位'表。當我解決所有這些問題時,我會得到一個空的結果。 – Shawn31313

+0

@ Shawn31313「shawn31313」是當前用戶權限?所以這個用戶可以看到他們的朋友的帖子,對吧?但是我在帖子表中看不到任何「yitze」和「test123」的帖子。這就是你得到空的結果。 –

+0

那麼,我需要能夠看到我自己的帖子。 – Shawn31313