2012-07-21 75 views
2

我有一個表,我存儲的追隨者,我有另一個表,我存儲的友誼 現在我有第三個表存儲流數據。複雜的Mysql查詢合併3個表數據?

它是一個社交網絡,還有那麼我不希望有跟隨&友誼一個表上有許多的原因(指Facebook的訂閱/朋友)

可有人提出了一個方法,我應該怎麼查詢流表挑選朋友&以下的活動?

任何幫助將非常感激,謝謝

下面是簡單的數據庫方案,它不是真的很喜歡這一點,但差不多!

好的,這裏是數據庫表格架構請問,

關注者表。 ROW_ID USER_ID Following_User_ID

朋友表 ROW_ID USER_ID Friend_ID

流表 ROW_ID USER_ID Contents_ID 時間 類型

+1

你可以發佈你的表結構,也許一些示例數據。更好,如果你可以把它作爲一個http://sqlfiddle.com/ – 2012-07-21 00:06:51

回答

1

你要買什麼可能是最好的,因爲兩個不同的做結果集......或兩者的結合。

Select "friend" as src, author, post from friends f inner join streams s on s.author = f.id 
union 
Select "follower" as src, author, post from followers f inner join streams s on s.author = f.id 

這只是一些僞代碼,但它應該給你一個如何進行的想法。不知道你的數據庫模式,這是我能提供的最好的。

編輯:

這可能是你尋找什麼,然後

select user_id, contents_id, time from (
    select user_id, contents_id, time 
    from followers f inner join stream s on s.user_id = f.user_id and f.user_id = "username" 
union 
    select user_id, contents_id, time 
    from friends f inner join stream s on s.user_id = f.user_id and f.user_id = "username" 
) order by time desc 

這將按照時間順序返回數據,降。

+0

好吧,這裏是數據庫表架構請 追隨者表。 ROW_ID USER_ID Following_User_ID 朋友表 ROW_ID USER_ID Friend_ID 流 ROW_ID USER_ID Contents_ID 時間 類型 – user1089705 2012-07-21 00:28:56

+0

你能說出它是如何恢復我的數據?按順序 ?我的意思是第一個朋友的帖子,然後關注用戶的帖 – user1089705 2012-07-21 00:34:02

+0

我不確定你想在這裏做什麼樣的訂購或分組。坦率地說,如果你想按朋友分組結果或者先按照其他順序排序,那麼這就是你的兩個操作,而不是一個。我已經更新了我的答案。 – whiskeyfur 2012-07-21 00:56:40