ホームページ >データベース >mysql チュートリアル >PHP および MySQL の順序なしスコア テーブルからユーザー ランクを効率的に取得する方法

PHP および MySQL の順序なしスコア テーブルからユーザー ランクを効率的に取得する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 22:44:29469ブラウズ

How to Efficiently Retrieve User Rank from an Unordered Scores Table in PHP and 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 ずつ増分されてランクが決定されます。

使用例

「スコア」を想定' 次の列を持つテーブル:

  • id (主キー)
  • verify_string (文字列)
  • イニシャル (文字列)
  • スコア (整数) )

イニシャルが「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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。