2013-07-13 48 views
-2

所以我現在編寫一個像新聞飼料嘰嘰喳喳,但問題是,我自己的帖子顯示前4次(有4個條目在下面我想這就是爲什麼它顯示我的帖子4時)有一些MySQL代碼試圖從誰獲取數據後,我+我的自我

SELECT * 
FROM following AS f, posts AS p 
WHERE p.post_user_id = 1 OR 
     (f.follower_id = p.post_user_id AND f.user_id = 1) 
ORDER BY `p`.`post_time` DESC 

所以這是我此刻的代碼。雖然我認爲它錯了,因爲它會顯示我的帖子4次。我怎樣才能解決這個問題?

+0

請添加表格結構,示例數據和預期輸出。 –

+0

您是否真的想要「跟隨」數據作爲結果,或者只是在查詢中使用它來查找帖子是否應該顯示? –

回答

1

因爲它看起來像你真的不關心following領域,只想職位,怎麼樣使用LEFT JOIN;?

SELECT p.* 
FROM posts p 
LEFT JOIN following f ON f.follower_id=1 AND p.post_user_id = f.user_id 
WHERE post_user_id=1 OR f.user_id IS NOT NULL 
ORDER BY `p`.`post_time` DESC 

An SQLfiddle to test with

+0

感謝您的完美工作 – arberb

2

由於您使用在JOIN標準OR,我相信你收到Cartesian Productpost_user_id = 1。嘗試這樣的事情,而不是:

SELECT * 
FROM following AS f 
    JOIN posts AS p ON f.follower_id = p.post_user_id 
WHERE p.post_user_id = 1 OR f.user_id = 1 
ORDER BY p.post_time DESC 
相關問題