ユーザーが投票できる項目の表があります。この表には、アイテムが累積した投票数を保持するvotes
列と、それが持っている投票数に基づいてすべての項目のランキングであるrank
列があります(つまり、ほとんどの投票ではランク1、ほとんどがランク2になるなど)各項目が投票された後にランクを再計算する
現在、私はすべての投票の後にすべての項目のランクを再計算しています。
SET @rank = 0
UPDATE items SET rank = @rank := @rank + 1 ORDER BY votes DESC
これは、ほとんどの部分は動作しますが、議決権をアカウントに取ることはありません:ユーザーの投票が、私は次のクエリですべてのランクを、その項目のvotes
列に1を追加し、更新する場合には、ありますネクタイ。投票がある場合[10、4、3、0]、私はランク[1, 2, 3, 4]
を期待するでしょう。しかし、もし私が投票[10, 10, 3, 0]
を持っていれば、私はランク[1, 1, 3, 4]
を希望します。これは起こりません。私はまだランク[1, 2, 3, 4]
を取得します。
上記のようにネクタイを組み込むにはどうすればよいですか?
これは素晴らしいですが、データベースのランクデータを更新していないように見えます。各行の新しいランクのみを返します。 – drusepth
私は自分の選択を更新に変更して回答を編集しました。 –