私は最近、ユーザーがポイントの降順で並べられるスコアリング システムを作成しました。最初に、ランクを独自の列に格納していました。このループを実行してランクを更新していました。
$i = 1;
$numberOfRows = mysql_query('SELECT COUNT(`id`) FROM sector0_players');
$scoreboardquery = mysql_query("SELECT * FROM sector0_players ORDER BY points DESC");
while(($row = mysql_fetch_assoc($scoreboardquery)) || $i<=$numberOfRows){
$scoreid = $row['id'];
$mysql_qeury = mysql_query("UPDATE sector0_players SET scoreboard_rank = '$i' WHERE id = '$scoreid'");
$i++;
}
そして、膨大な数のユーザーに対して実際にこれを実行するのが遅いことは言うまでもなく、非常に困難でした。代わりに、クエリを作成しようとしましたが、これで終わりました。
SET @rownum := 0;
SELECT scoreboard_rank, id, points
FROM (
SELECT @rownum := @rownum + 1 AS scoreboard_rank, id, points FROM sector0_players ORDER BY points DESC
)
as result WHERE id = '1';
ただし、これは単なる選択ステートメントです。ループと同じようにテーブルを更新するように、それを回避して変更することはできますか?