0

我有一個數據庫設計問題,我仍然很新的MySQL,所以我想我會問這裏。從多個表中獲取按時間順序排列的數據的最佳方式是什麼?例如,用戶做了很多事情,他們投票,評論,評分,提問。我將所有這些信息保存在各自的表格「tblVote」,「tblRate」等中,現在是棘手的部分。一個用戶可以跟隨一個或多個用戶,所以說你跟隨3-4人。以下允許您查看他們的互動,投票,評級,評論,提問問題等(如Facebook或類似的東西)。從多個表獲取Feed數據的最佳選擇?

從他們關注的每個人的所有5個表格中獲取所有信息,然後按照時間順序對所有信息進行排序,最佳方式是什麼?我假設我目前的方法(foreach追隨者抓住所有的投票,評論,評級等,並整理將是可怕的)

我的工作理論,所以我的工作理念是創建一個交互表,它有一個列的用戶id,其他表項的ID和一個類型引用。所以例如

用戶ID | InteractionID |鍵入

9  1232  Comment 


10  80  Rating 


9  572  Vote 

然後,你可以先走一步,抓住所有互動每次跟隨的人,那種然後說搶前10名?並查詢各個數據庫以獲取完整信息(評論時間,評論文本等)

+0

爲什麼不只是做一個多到許多用戶追隨者之間的關係。然後使用常規聯接從這5個表中獲取所需的所有信息,按datetime_col和LIMIT 10排序?我只是想知道什麼阻止你做你想做的事? – tempusfugit 2014-09-05 14:55:43

+0

就像我說過的,我並不是超級用戶,但我只是假設每個用戶每桌上抓取數百/數千行將是瘋狂的資源密集型。 – CMOS 2014-09-05 14:58:39

回答

0

User和Follower之間存在多對多關係。因爲Follower也是另一個用戶,所以這成爲了多對多的遞歸。當你分解這種關係時,你會得到一個關聯表或一個動名詞。

User_Follower {ID,userid_fk,followerid_fk}

兩者userid_fk和followerid_fk正在引用到User表。

現在,我假設你有用戶tblRate,用戶tblVote,用戶tblPost等

所以間的一種一對多的關係,你可以寫一個連接是這樣的:

選擇p.postTitle,p.postTag,..., c.commentId,c.commentData,...

從(tblUserûINNER JOIN tblPost p

ON(p.userid = u.userid))INNER JOIN tblC ommentÇ

ON(c.userid = u.userid)

其中u.userid在
(從user_follower選擇userid_fk其中followerid_fk = 100)

的OrderBy p.datetime_col ASC,C。 datetime_col ASC LIMIT 10;

100是您希望獲取信息的用戶。

的想法是,你只需要一個關聯錶鏈接UserFollower,然後用簡單連接獲取數據的所有追隨者