2016-02-26 114 views
0

我正在嘗試製作一個類似Facebook的主頁,因此它可以顯示來自我關注的人的帖子,但我無法看到自己的帖子職位,因爲我不能跟隨我自己。這是我寫的SQL代碼行(它包含PHP變量):在PHP和MySQL中顯示我的帖子以及關注者帖子

SELECT * 
FROM user_posts 
INNER JOIN user_following ON user_posts.username = user_following.username 
WHERE user_following.follower = '$me->username' 
ORDER BY id DESC 
LIMIT 0, 15 
  1. user_posts表包含了所有的帖子。
  2. user_following表包含所有跟隨數據,其中username在用戶被跟蹤,並且follower是繼username
  3. $me->username被記錄在用戶的用戶名的用戶。

user_posts表結構: enter image description here

user_following表結構: enter image description here

謝謝,提前!

+1

'mysql_ *'方法很久以來不推薦使用。請使用PDO或'mysqli_ *'方法。 –

+0

我必須使用'mysql'作爲我正在使用的網站'mysql' – Arqetech

+1

我猜你應該使用'LEFT JOIN'並添加'OR user_posts.what_field_holds_username ='$ me-> username' '到你的'WHERE'子句。還要注意'*'帶回謂詞表和連接表的每一列,所以名稱衝突可能是一個問題。 –

回答

3

有幾個不同的方式對皮膚此查詢:

子查詢

SELECT * 
FROM user_posts 
WHERE user_posts.username = 'bob' 
OR user_posts.username IN(
    SELECT username 
    FROM user_following 
    WHERE user_posts.username = user_following.username 
) 
LIMIT 0, 15 

http://sqlfiddle.com/#!9/6bf2c6/9

使用用戶表

需要GROUP BYDISTINCT user_posts.id,這是非最佳。

SELECT 
    user_posts.* 
FROM users 
LEFT JOIN user_following ON users.username = user_following.username 
INNER JOIN user_posts ON (
    users.username = user_posts.username 
    OR user_following.follower = user_posts.username 
) 
WHERE users.username = 'bob' 
GROUP BY user_posts.id 
LIMIT 0, 15 

http://sqlfiddle.com/#!9/d91be/1

重要!確保並索引表格中的這些列。否則,表格會變得更大(尤其是user_following),表現會受到影響。

+0

考慮到OP沒有提供'CREATE TABLE'模式,並且你不得不使用截圖,那麼Fiddles非常棒! – halfer

0

試試這個代碼:

select * 
from user_posts up 
join user_following uf on up.username = uf.username 
where uf.follower = '$me->username' 
or up.username = '$me->username' 
+1

如果你可以提供關於表格結構的更多信息,它會很容易。 –

+1

不是我的問題 - 你可以等待OP提供它,或者做一個有教育的猜測':-)' – halfer

+1

好吧我將把數據庫結構 – Arqetech