我有4個表:posts
,users
,mentions
,following
獲取唯一的記錄多連接用條件
posts
----------------------------
id | user_id | post_text
1 1 foo
2 1 bar
3 2 hello
4 3 jason
users
------------
id | name
1 jason
2 nicole
3 frank
mentions
--------------------------
id | post_id | user_id
1 4 1
following
-------------------------------------------------
id | user_id | user_id_of_user_being_followed
1 1 2
posts
包括誰張貼一些文本 users
有用戶ID的用戶的USER_ID和用戶名稱 mentions
具有提及1個或更多其他用戶的任何帖子的帖子ID和用戶ID following
具有用戶ID和他們正在關注的用戶(用戶可以跟隨0到很多用戶)
我想要做的就是返回給定用戶關注的用戶的所有帖子,加上任何提及該用戶的帖子(不管給定的用戶是否跟隨),而不返回任何重複。
SELECT p.id, p.post, u.name,
FROM following f
JOIN posts p ON f.following = p.user_id
JOIN users u ON u.id = p.user_id
WHERE f.user_id = :user;
以上的回報來自給定用戶以下用戶的所有帖子,但我努力搞清楚如何包括提及以及(記住,用戶不必跟隨別人能看到他們已經提到過的帖子)。
UPDATE: 感謝John RI能想出解決辦法:如果我理解你的querstion正確你想左連接包括任何提及
SELECT DISTINCT(p.id), p.post, u.name
FROM posts p
LEFT JOIN following f ON f.following = p.user_id
LEFT JOIN mentions m ON m.posts_id = p.id
JOIN users u ON u.id = p.user_id
WHERE (f.user_id = :user_id OR m.user_id = :user_id)
嗯,這似乎不工作,因爲我們已經限制了基於'JOIN帖子p ON f.following = p.user_id'返回的帖子 - 至少我認爲這是原因。 – kylex
你能提供幾行數據供我使用嗎?我可以看到我在理論上缺少它,如果你做 –
編輯原始帖子。 正如你所看到的,用戶1只跟隨用戶2,但是用戶3在用戶4中提到用戶1.因此,用戶1應該看到來自用戶2的所有帖子,以及他們被提及的帖子(如提及的表)。 – kylex