2012-08-08 39 views
1

摘要:什麼是最有效的方式來存儲類似於類似系統的信息在FB上。又名,喜歡的記錄被保存,喜歡它的人被保存等。存儲投票信息 - 數據庫概要

它需要與用戶ID相關聯以便知道誰喜歡它。問題是,你是否有一列有一個用逗號分隔的喜歡事物的ID列表,或者你是否有一個單獨的專欄(方式太多)。存儲的信息將是布爾值(1/0),但需要與用戶以及所喜歡的「頁面」關聯。

我的想法是這樣的:

列名=喜歡如:

1,2,3,4,5 

阿卡,用戶 「喜歡」 有1,2,3,4的ID的頁面和5.要計算總計「喜歡」,需要採取一個計數,然後將其存儲在與頁面本身相關的數據庫中(表格已經存在)。

這似乎是對我來說最好的方式,但有沒有更好的選擇,任何人都可以想到?

P.S.我不喜歡FB,但這是最簡單的解釋。

編輯:類似的想法加/ neg在這裏在stackoverflow。

回答

3

在這種情況下,最好的方法是創建一個新表來跟蹤喜歡。所以假設你有表posts,其中有一列post_id其中包含所有的帖子(用戶可以投票)。而你有另一個表users與列user_id,其中包含所有的用戶。

您應創建一個表格likes,該表格至少有兩列,如like_postidlike_userid。現在,每當用戶喜歡帖子,在該表格中創建一個新的行,其中帖子的ID(來自posts的值爲post_id)和喜歡帖子的用戶的id(user_id的值) 。當然,您可以在likes表中輸入更多列(例如,以便跟蹤何時創建類似)。

你在這裏有什麼叫做many-to-many relationship。谷歌它得到一些關於它的更多信息,並找到更多關於如何正確實施它們的建議(你會發現逗號分隔的ID列表不會是最佳實踐之一)。

根據意見更新: 如果我是正確的;你想獲得所有對藝術家投票的用戶(按名稱排序)的列表。你應該這樣做:

SELECT Artists.Name, User.Name 
FROM Artists 
JOIN Votes 
    ON Votes.page_ID = Artists.ID 
JOIN Users 
    ON Votes.Votes_Userid = Users.User_ID 
WHERE Artists.Name = "dfgdfg" 
ORDER BY Users.Users_Name 

這裏有一件奇怪的事情;您投票表中包含藝術家ID的列似乎被稱爲page_ID。此外,你在列名中有點不一致(不是很糟糕,但是如果你希望在單獨放置6個月後能夠理解你的代碼,請記住這一點)。在你的評論中你說你只做一個連接,但你實際上做了兩個連接。如果你指定了兩個表名(就像你做的那樣:JOIN Users, Votes SQL實際上加入了這兩個表)

根據你在評論中發佈的查詢,我可以告訴你沒有太多的使用連接的經驗。我建議你閱讀如何使用它們,它會真正提高你編寫好代碼的能力。

+0

聽起來不錯。謝謝:)將開始計劃它,看看我怎麼走:) – Andrew 2012-08-08 07:54:05

+0

我的想法atm是使用類似於這樣的mysql語句:SELECT Artists.Name,User_Name,Votes_vote FROM Artists WHERE Artists.Name =「dfgdfg」 JOIN Users ,票數 ON Artists.ID = Votes.page_ID,Users.User_ID = Votes.Votes_Userid ORDER BY User_Name由於我相信你只能通過這個過程加入一個表,所以很可能存在連接方面的問題,但這會是想法。這是對的嗎? – Andrew 2012-08-08 08:12:46

+0

我已更新我的答案以回答您的評論。 – 2012-08-08 08:20:05