2012-01-31 42 views
1

好的,我知道這不是一個獨特的概念。然而,我發現的例子和教程並沒有真正涵蓋它們的全部內容,就是你所做的,上傳和完成。對很多範圍來說都是可以的。不過,我想從頭開始構建一個。php mysql 5星評級結構

我所擁有的是對產品進行投票的用戶,我正試圖弄清楚如何正確地將表格放在一起以支持這一點。所以我有我的用戶表,我的產品表,並從中我想創建2個新表。其中一個實際上是每個產品的投票數,每個產品投票排名都會有一個唯一的ID,這樣我就可以得到第二個表,這個表會有投票和評論。我可以在大桌子上爲2的組合創建,是的,但是隨着桌子的增長,我可以預見問題的根源。所以我寧願保持2分開。我想要做的另一件事是保持對10個不同等級的選擇標籤。 1/2是所有選票中總數最高的最低5位。那麼最好的方法是構建一個至少每個產品評級存儲的表格。

那除了最好的方法把數字放在什麼?小數點?整數?我將如何計算5星級的概念。

+0

投票有原評論者的評論嗎?你爲什麼用單個表來保持什麼是明確的1:1關係? – 2012-01-31 00:29:35

+0

我期望隨着時間的推移表格會變得非常大,並且預見查詢時間的問題,我希望保持每個產品的投票和對他們的評論分開,並將產品數據分開 – chris 2012-01-31 01:29:25

回答

3

三表(其中兩個我假設你已經有了):

users (id, etc...) 
products (id, etc...) 

votes (userId, productId, rating, comments) 

rating可以是SMALLINT類型。這給你一個0-255的範圍,你可以把它當作用戶的分數「十倍」。例如:4星= 40,0.5星= 5。除非您預見用戶想要贈送3.1415顆星,否則這應該足夠了,再加上比float列高的內存效率。

然後,當你想要查找的平均得分:

SELECT AVG(rating) FROM votes WHERE productId = xxx 

我不認爲你應該有一個這樣的表結構的任何特別的問題。如果你是超級驚人的偏執狂,那麼是的,你可以爲評論創建一個單獨的表格,然而,這將是過早優化的教科書定義。

+0

好的,如果這是按每個說明來管理它的方式,那麼最好的方法是什麼?它會是一個例子1-5的評分除以總票數 – chris 2012-01-31 01:30:57

+1

你說AVERAGE。但它應該是MySQL的'AVG'。 – AlexioVay 2017-06-29 22:02:12