2012-06-14 34 views
-2

我有3個表格。使用聯合或聯合進行不同的過濾

  • tb_post:ID,用戶,文本和
  • tb_follow:ID,用戶,followed_user和
  • tb_share:ID,fk_post_id,用戶(誰分享的訊息)

所以用戶01希望檢索用戶的所有帖子,其次是user01 +由 共享的所有帖子由用戶01進行操作的用戶

編輯:我怎麼能得到它?我試過這個查詢:

select * from post 
left join follow on post_user = follow_user 
left join share on follow_user = share_user 

但我只拿到第一部分。

+0

@Tony霍普金森我用左聯接(SELECT * FROM後LEFT JOIN遵循post_user = follow_user左連接上follow_user = share_user份額),但我只得到了第一部分 – Roobah

+0

@user爲什麼呢?問題很明顯。我把我的桌子和我想要得到的! – Roobah

+1

@usr你對伴侶有什麼看法?它的工作原理是 – jcolebrand

回答

1

我不相信你可以做到這一點,而不使用工會。性能明智,你基本上運行兩個查詢。一定要有適當的字段索引,你應該沒問題。

SELECT tb_post.id, tb_post.text 
FROM tb_post INNER JOIN tb_follow ON tb_post.user = tb_follow.followed_user 
WHERE (((tb_follow.user)=100)) 
ORDER BY tb_post.id 
UNION SELECT tb_post.id, tb_post.text 
FROM (tb_share INNER JOIN tb_follow ON tb_share.user = tb_follow.followed_user) INNER JOIN tb_post ON tb_share.fk_post_id = tb_post.id 
WHERE (((tb_follow.user)=100)) 
ORDER BY tb_post.id; 
+0

。我的問題是如何得到這一點,是否有可能不使用工會。你用表演的東西回答了所有的問題。謝謝Nick。建設性的答案:D – Roobah

+0

這種語法不起作用 - 在'UNION'中只能有一個'ORDER BY'。還有什麼是((((的所有(的)目的)括號))))? –

+0

是的,你說得對,我只用了一個命令,括號只是爲了說明我相信 – Roobah