我試圖想出一個投票系統,像這樣的一個很好的優雅的解決方案。如果有一種方法可以通過使用觸發器來實現優雅,我無法弄清楚,所以我嘗試使用存儲過程。這是我想出來的,這不是很好,所以我要求提供想法。我甚至可能會有一個查詢而不是查詢+存儲過程。但我真的很想知道一個乾淨的方式來更新用戶的積分並插入/更新投票。點在一個單獨的表中,通過程序進行更新。投票 - 存儲過程
給予好評
INSERT INTO votes
ON DUPLICATE KEY
UPDATE votes
SET v.weight = v.weight + 1
WHERE v.weight = 0 OR v.weight = -1
AND v.userid = {$uid}
AND v.itemid = {$itemid}
//call procedure to +1 user points
Downvote
INSERT INTO votes
ON DUPLICATE KEY
UPDATE votes
SET v.weight = v.weight - 1
WHERE v.weight = 1 OR v.weight = 0
AND v.userid = {$uid}
AND v.itemid = {$itemid}
//call procedure to -1
吸頂(當用戶改變從上往下投票)
INSERT INTO votes
ON DUPLICATE KEY
UPDATE votes
SET v.weight = -1
WHERE v.weight = 1
AND v.userid = {$uid}
AND v.itemid = {$itemid}
//call procedure to -2
Flipup
INSERT INTO votes
ON DUPLICATE KEY
UPDATE votes
SET v.weight = 0
WHERE v.weight = -1
AND v.userid = {$uid}
AND v.itemid = {$itemid}
//call procedure to +2
我剛纔已經回答類似於上述的(雖然它無關,與存儲過程),請閱讀我的答案[這裏](http://stackoverflow.com/a/8617640/1090079)來簡化你當前的查詢問題。 –