私はSOのような投票システムのための素敵なエレガントなソリューションを考え出しています。トリガを使用してエレガンスでそれを行う方法がある場合、私はそれを把握することができませんでしたので、私はストアドプロシージャで試しています。これは私が思いついたことです、それはかなりではありませんので、私はアイデアを求めています。おそらく、クエリ+ストアドプロシージャではなく、1つのクエリを持つことさえあります。しかし、私は本当にユーザーのポイントを更新し、投票を挿入/更新するためのきれいな方法を知りたいと思います。ポイントは、プロシージャによって更新される別のテーブルにあります。 (ユーザーの変更がアップからダウンに投票)投票 - ストアドプロシージャ
Upvote
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
Flipdown
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)を読んでください。 –