私は多くのユーザーと一緒にウェブゲームを開発しています。メイン画面には、多くのマーカーが表示された地図が表示されます。各マーカーはユーザーにリンクされており、各ユーザーは、私が表示したいランキング(ポイントで計算)内の位置を持っています。
ランキングの位置を動的に計算するには、ここから次のことがわかりました。
SET @rownum := 0;
SELECT rank, points FROM (
SELECT @rownum := @rownum + 1 AS rank, points, uid
FROM landings ORDER BY points DESC
) as result WHERE uid=xxxxxxxx
ただし、このクエリは、プレイヤーがマップを未踏のゾーンに移動するたびに、マップにロードされた新しいマーカーごとに発生します。
一方、プレーヤーがゲームを終了するたびに、データベース上のすべてのユーザーのランクフィールドを更新するとどうなりますか?もちろん、これは巨大に聞こえますが、このシナリオは他のシナリオよりも頻度が低くなります。どう思いますか?更新は選択よりもはるかに効率が悪いですか?いくら?
ご協力ありがとうございました!
詳細については編集してください:この描画は画面を示しています。マーカーがたくさんあるマップがあり、画面内のすべてのマーカーについて、前に説明したクエリがトリガーされます(AJAXでマーカーをロードしたとき)。もう1つのオプションは、ユーザーがゲームをプレイし、もちろんポイントの合計数を変更するたびに、データベース内の想定される「ランク」フィールドがデータベース上のすべてのユーザーに対して更新されることです。