yamata.programmer.blog

29歳 プログラマになるために通った道に落ちていた情報を発信します!

【PHP初心者必見】MySQLで保存されたデータのランキング表示方法【同率の表示方法も紹介】

今回の記事を読んで欲しい方

  • PHPMySQLを使っており、ランキング表示に困っている方
  • 同率の順位を表示したい方

今回はPHPMySQLで保存されたデータのランキング表示方法でについて書いていこうと思います。

PHPでのMySQLアクセス方法と情報の取得方法を知っている前提で話します。

詳しくはこちらの記事をご覧ください。

www.yamata-pgblog.com

 

ランキングを同率でも表示させる簡単な方法

ランキングを表示するためには、何らかの成績やスコアが必要となります。

今回紹介するやり方は自分が作った例です。

まずランキングのカウント、表を表示させる数をカウントさせておくカウンタ、直前の勝率を格納する箱を用意します。

その後、PDOを用いてテーブルのデータを取得します。

number_of_times、win_rate、idはみなさんのSQLのテーブルによって異なります。

$rank = 1;

$count = 1;

$beforeWinRate = 0;

$stmt = $pdo->prepare("select * from result where number_of_times = ? order by win_rate desc, id desc");

単にランキングを表示させる場合であれば、はorder by descで降順で表示させればOKです。

同率で表示させる場合は、まずwhile文でPDOで取り出した情報を全て取り出します。
while($row = $stmt->fetch()){

直前の勝率とwhile文で今取り出した勝率が一緒だった場合に、順位を同率にする処理です。

$row['win_rate']はみなさんが取り出したい情報に変更してください。

if($beforeWinRate != $row['win_rate']){

 $rank = $count;
}

$beforeWinRate = $row['win_rate'];
$count++;

新しくランキングを比較するために、今回取得したランキングを直前のランキングに変更し、カウントを足します。

この処理の後に、表示させる処理を書けばOKです。

順位 名前 勝率 勝ち数 負け数
1 3 75% 3回 1回
1 hoge 75% 3回 1回
3 4 50% 2回 2回
3 4 50% 2回 2回
5   25% 1回 3回
5 4 25% 1回 3回
5 hoge 25% 1回 3回
5 hoge 25% 1回 3回

勝率が高い順に並べております。

順位2位が存在せず、同率1位として表示させることができました。

赤い枠は今回はご紹介していないので、気にしないでください。

 

今回のまとめ

$rank = 1;

$count = 1;

$beforeWinRate = 0;  // ここより上は、ランキングのカウント、表を表示させる数をカウントさせておくカウンタ、直前の勝率を格納する箱を用意

$stmt = $pdo->prepare("select * from result where number_of_times = ? order by win_rate desc, id desc"); // 降順で、SQLテーブルからデータ取得

while($row = $stmt->fetch()){ // データを順番に取り出して表示させる

 if($beforeWinRate != $row['win_rate']){ // 直前の順位とこん取り出した順位が一緒だったら同率順位を表示させる

  $rank = $count;
 }

$beforeWinRate = $row['win_rate']; // 直前の順位を更新
$count++; // カウントをプラス
}

今回の学びは以上です。