2012-12-13 27 views
0

我在計算投票時需要使用RDBMS中的三個表(通常是MySQL或Postgresql)。第一個是用戶表,其中用戶具有不同級別的拉(重量),第二個是記錄他們對物品投票的表格,第三個是物品表本身。RDBMS的加權投票處理

這個想法是,主持人或者已經存在較長時間的用戶在投票時應該有更多的「權重」。

USER { 
    id, 
    weight int, 
} 

VOTE { 
    vote int, 
    user_id, 
    item_id, 
} 

ITEM { 
    id 
} 

我想計算選票的基礎上,除了得票多少用戶投票的權重的物品。因此,如果用戶100和101都具有1的權重並且投票得分爲「3」,並且具有10的權重的用戶102出現並投票「5」,則我們爲該用戶102投出的投票分配更多價值。

也許像所有用戶的總用戶權重合並在一起用於分配投票。

(user:weight * vote)/sum(user:weight)) 

也許我應該使用一些其他的公式來曲線權重在系統中的用戶的權力。

如何計算考慮用戶權力等第三個變量的選票?

對於這個問題,我該如何計算體重?也許我可以將所有用戶的總重量相加,然後除以總用戶數,以找到我可以用來給用戶的重量在1到100之間的平均重量,因此更容易處理。

+0

恕我直言,這不是一個有效的問題SO –

+0

您的權重公式似乎是正確的,但我會使用100作爲默認值,以便整數可以使用戶之間的細分差異比整數乘法器。 - 關於第三個參數:你能解釋一下你使用的「功率」的概念嗎?這與「體重」的概念有什麼不同? –

+0

@Lewyx,我的意思是讓更多的「權重」賦予用戶權力 - 沒有其他區別。 – Xeoncross

回答

2

你可以做算術在聚集:

select v.item_id, 
     (case when sum(u.weight) > 0 then sum(u.weight * v.vote)/sum(u.weight) end) as weightedVote 
from vote v join 
    user u 
    on v.user_id = u.id 
group by v.item_id 

如何你計算的權重是不同的事情。該查詢顯示如何使用它們。