【发布时间】:2011-12-23 15:14:10
【问题描述】:
我正在尝试为 SO 之类的投票系统提出一个不错的优雅解决方案。如果有办法使用触发器优雅地做到这一点,我无法弄清楚,所以我正在尝试使用存储过程。这是我想出的,它不漂亮,所以我正在征求意见。我什至可能会有一个查询,而不是查询+存储过程。但我真的很想知道一种更新用户积分和插入/更新投票的干净方法。点在一个单独的表中,由程序更新。
点赞
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
投反对票
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
翻转
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
【问题讨论】:
-
我刚刚回答了一个与上面类似的问题(虽然它与存储过程无关),请阅读我的回答here 以简化您当前的查询。
标签: mysql stored-procedures triggers