2011-11-03 38 views
2

我已經有一個5星評級系統(用戶投票1-5 ...和平均得分顯示 - 我有一個頁面,他們投票,它插入數據庫有用戶名和投票),但是我現在想要通過整合某種權重來完善它,這種權力只是爲了增加您的投票對內容的平均得分的影響。它會讓你的投票「比」更重。將重量集成到5星級投票系統中?

我目前有一個$level(這是一個1-10之間的數字,每個用戶都有......其中10是最高的,因此效果最好),我想用它來考慮。

我只是不確定如何去做這件事。

回答

1

如果用戶有X級,則可以讓他/她的投票權重爲X級1票。您可以在另一個領域的「權重」添加到表中,並顯示vote*weight平均:

SELECT AVG(weight * vote) 
FROM rating 
WHERE item = ? 

(其中你需要ID?)

如果你認爲這是對你的需求太複雜(和您已經存儲了投票的用戶),您可以使用此查詢:

SELECT AVG(r.weight * u.level) 
FROM rating 
JOIN user ON r.user_id = u.id 
WHERE r.item = ? 
+0

所以表中的權重列將包含用戶投票*級別? – user962026

+0

@ user962026對於最後的評論我很抱歉(誤讀了某些內容):權重列將是用戶的級別(如果它更適合您,可以將其命名爲'級別')。我將它命名爲「權重」,因爲您可以獨立於「級別」來改變它,例如以對數形式。 –

2

最簡單的方法是在每個級別插入一個投票到數據庫中。

for($i = 0; $i < $level; $i++) { 
    store_vote($user, $item); 
} 
+1

+1爲最簡單的可能解決方案。我在這裏看到的唯一缺點是你不能在以後重新計算 - 我更喜歡加權方法,所以如果結果出奇怪,你可以改變權重並重新計算 - 但這當然是最簡單的方法來做到這一點,情景,它會很好。如果這是一個簡單的「超級用戶獲得兩票」,我更傾向於使用它;不能修改權重的固有風險會讓我猶豫是否會用這個10分制。 – Ian