ホームページ >データベース >mysql チュートリアル >PHP および MySQL の順序なしスコア テーブルからユーザー ランクを効率的に取得する方法
PHP および MySQL の順序なしスコア テーブルからユーザー ランクを取得する
順序なしレコードを含むスコア テーブルがあるシナリオでは、ユーザーのランクは一般的な要件となる場合があります。すべての行をループし、スコアで並べ替えてランクを計算することも実行可能なオプションですが、SQL ステートメントを使用したより効率的なアプローチも存在します。
SQL ステートメント ソリューション
ループせずにユーザーのランクを取得するには、次の SQL クエリを利用できます。
<code class="sql">SELECT s1.initials, ( SELECT COUNT(*) FROM scores AS s2 WHERE s2.score > s1.score )+1 AS rank FROM scores AS s1</code>
このクエリは、サブクエリを使用して、スコアが現在のスコアより大きい「スコア」テーブル内の行数をカウントします。行のスコア。このサブクエリの結果は、より高いスコアを持つユーザーの数を表し、1 ずつ増分されてランクが決定されます。
使用例
「スコア」を想定' 次の列を持つテーブル:
イニシャルが「ABC」でスコアが 100 のユーザーのランクを取得するには、次の PHP コードを実行します。
<code class="php">$query = "SELECT initials, ( SELECT COUNT(*) FROM scores AS s2 WHERE s2.score > s1.score )+1 AS rank FROM scores AS s1 WHERE initials = 'ABC' AND score = 100"; $result = $db->query($query); $row = $result->fetch_assoc(); echo "Rank: " . $row['rank'];</code>
このコードはユーザーのランクを出力します。この場合、テーブルに合計 1000 件のレコードがある場合、「1000 人のプレイヤーのうち 101 人」になります。
以上がPHP および MySQL の順序なしスコア テーブルからユーザー ランクを効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。