php、mysqlを使用した得点ランキング

このQ&Aのポイント
  • 現在得点ランキングを作成しています。
  • mysqlの中に入っているデータを取り出して表示させたいのですが、なかなかうまくいかず困っています。
  • mysql内に入っている名前の数で得点数を出してなおかつソートで降順にしたいです。
回答を見る
  • ベストアンサー

php、mysqlを使用した得点ランキング

現在得点ランキングを作成しています。 mysqlの中に入っているデータを取り出して表示させたいのですが、 なかなかうまくいかず困っています。 mysql内 |id|name| |1|山田| |2|佐藤| |3|山田| |4|鈴木| |5|佐藤| |6|山田| |7|鈴木| |8|田中| としております。 表示方法は 順位| 名前 | 得点数 1位 | 山田 | 3 2位 | 佐藤 | 2 2位 | 鈴木 | 2 4位 | 田中 | 1 としたいです。 mysql内に入っている名前の数で得点数を出してなおかつソートで降順にしたいです。 お分かりの方がいらっしゃいましたらご教示お願いします。

  • h-h13
  • お礼率24% (37/149)
  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • hamachi98
  • ベストアンサー率100% (5/5)
回答No.2

No.1です。 すみません、ちょっと回答が要件とズレていました(汗 SELECT `name`, COUNT(`id`) AS `point` FROM `test` GROUP BY `name` ORDER BY `point` DESC とし、結果を展開する際に以下のように順位を把握しながら出力、でどうでしょうか? $rank = 1; $rows = 1; $point = NULL; while ($row = mysql_fetch_assoc($result)) { if (!$point) { $point = $row['point']; } elseif ($point > $row['point']) { $point = $row['point']; $rank = $rows; } echo "順位:{$rank}, 名前:{$row['name']}, 得点数:{$point}<br>"; $rows++; }

h-h13
質問者

お礼

お忙しい中ご回答有難う御座います。 できました。 本当に助かりました。 有難う御座います。

その他の回答 (1)

  • hamachi98
  • ベストアンサー率100% (5/5)
回答No.1

`test`というテーブルだったとして SELECT `id`, `name`, COUNT(`id`) AS `rank` FROM `test` GROUP BY `name` ORDER BY `rank` DESC というクエリでいかがでしょうか?

関連するQ&A

  • ランキングの並び替え

         A      B     C 1   田中     70     (3)            2   佐藤     100     (1)          3   鈴木     80     (2)                 A    B    C 1  佐藤  100   (1) 2  鈴木   80    (2) 3   田中   70    (3)  ランキングの関数を入れて、何とかCのセルにランキングが表示できるように なったのですが、これを順位ごとに並べ替えるのが、どうしてもうまく出来ません。 下のほうのように、Cセルのランキングを並び替えたときに、A.Bのセルも連動してきれいに並べ替えたいのですが、どなたか分かる方がおりましたらお教え願えないでしょうか? 宜しくお願いいたします。

  • MYSQLで重複せずにカウント上位から取得したい

    お世話になります。 MYSQLにて以下のようなtableがあるとします。 id ex_id name count flag time memo 1 1 山田 100 on 10:11 テスト 2 1 山田 80 on 10:12 テスト2 3 2 田中 50 on 10:13 テスト3 4 3 鈴木 30 on 10:14 テスト4 5 3 鈴木 110 on 10:14 テスト5 6 3 鈴木 10 on 10:14 テスト6 このうち、countの数字が高いものから表示したいのですが、 ex_idが重複する場合はその数字が最も高いもののみ表示したく考えています。 目的とした表示結果順は以下です。 id ex_id name count flag time memo 5 3 鈴木 110 on 10:14 テスト5 1 1 山田 100 on 10:11 テスト 3 2 田中 50 on 10:13 テスト3 distinctやgroup byなど色々考えてみたのですが、思ったような挙動になりませんでした。 以上、よろしくお願い致します。

  • MySQLでのランキングの生成方法に関してなのですが、

    MySQLでのランキングの生成方法に関してなのですが、 下記の例にてid別にflgが1のモノの数でランキングをする方法はありますでしょうか? (同率は同じ順位とします) (毎日ミニテストを行って合格したらflgが1となるようなイメージです) (MySQLのみで行える方法を探しています) MySQL5.0.51を使用しています。 testテーブル id flg 1 1 1 0 1 1 1 1 2 1 2 1 2 1 2 0 3 0 3 0 3 0 3 0 4 0 4 0 4 0 4 0 5 1 5 0 5 0 5 0 ランキング 1位 1 1位 2 3位 5 4位 3 4位 4 ご教授よろしくお願いします。

    • ベストアンサー
    • MySQL
  • php の処理をした結果をカウントアップさせたい

    php と mysqlで作ろうと考えてます。 ・内容 php の処理をした結果 同じ名前があった場合 その名前をカウントアップさせたいです。 DBのテーブル name|counter 田中|1 佐藤|2 鈴木|5 phpの処理をした結果 「田中」 が重複していたい場合のDBの結果内容 name|counter 田中|2 佐藤|2 鈴木|5 参考サイトがございましたらアドバイスいただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • ランキング表示のプログラム

    質問です。 PHPにて、MySQLからデータを取得し 取得したデータを順位毎にランキング表示するプログラムを記述しているのですが 順位が重なった場合の処理に試行錯誤しています。 具体的には、野球で言えばホームラン数のランキングのように MySQLから「名前」「ホームラン数」のみを取得します。 順位は、ホームラン数でORDER BYにてソートします。 しかし実際は、ホームラン数が同数の場合もあるので そこをPHPロジックにて同率順位として表示できるプログラムを作りたいのです。 一般的にどのような記述方法で実現するのが望ましいのかアドバイス頂ければ幸いです。

    • 締切済み
    • PHP
  • 昨日を基点に30日間の対象レコードを表示したい

    php と mysqlで作ろうと考えてます。 ・内容 昨日を基点に30日間の対象レコードを表示したいです。 その際、降順表示を考えてます。 DBのテーブル date |name|counter 2013-04-20 |田中|2 2013-04-30 |佐藤|4 2013-05-10 |鈴木|8 2013-05-15 |近藤|11 2013-05-22 |藤木|10 2013-05-23 |藤原|10 やりたいことの結果イメージ(phpの処理をした結果) 実装日 2013-05-23 の場合 1位:近藤 2位:藤木 3位:鈴木 4位:佐藤 *補足 昨日から30日間のため 「田中」と「藤原」 は順位から対象外となります。 参考サイトがございましたらアドバイスいただければ幸いです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • MysqlでSUMをつかうとおもうのですが、、、。

    PHPとMySQLを使ってやっています。 以下のように予約テーブルとエージェントテーブルがあります。 予約テーブル                         予約ID  名前   電話番号 エージェント  人数    11  鈴木   ********   11    1     12  佐藤   ********   12    5     13  田中   ********   12    2     14  木村   ********   13    3     15  伊藤   ********   14    4     16  山田   ********   11    8   エージェントテーブル      エージェントID エージェント名       11  JTB         12  HIS         13  KNT         14  HNK         15  KKK   こちらのデータから以下のような検索結果を得たいのですが、 どうすれば宜しいでしょうか? 表示結果                           JTB  HIS  KNT  HNK  KKK      9    7    3    4    0 宜しくお願いします。

  • エクセルで条件に一致したセルの隣のセルを取得したい

    下のような「得点」という名前のシートがあります。 (「田中」のセルがA1です。)  [ 田中 ][ 10 ][ 200 ]  [ 山田 ][ 21 ][ 150 ]  [ 佐藤 ][ 76 ][ 250 ]  [ 鈴木 ][ 53 ][ 350 ] 別のシートのA1セルに、「佐藤」と入力すると、  [ 佐藤 ] 「得点」シートから「佐藤」の列を見つけて、B1、C1に  [ 佐藤 ][ 76 ][ 250 ] のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。 「得点」シートでは氏名が重複する事はありません。 IF文を使うと思うのですが、いまいち良く分かりませんでした。 よろしくおねがい致します。

  • EXCELで重複したデータの処理について

    氏名 | 点数 ----------- 山田 | ----------- 鈴木 | ----------- 小林 | ----------- 高橋 | ----------- 田中 | という表があるとします。 氏名 | 点数 ------------ 山田 | 80 ------------ 鈴木 | 100 ------------ 小林 | 70 ------------ 高橋 | 80 ------------ 田中 | 80 というように点数を入力すると 順位 | 名前 | 点数 ------------------- 1 | 鈴木 | 100 ------------------- 2 | 山田 | 80 ------------------- 2 | 高橋 | 80 ------------------- 2 | 田中 | 80 ------------------- 5 | 小林 | 70 のような表を自動的に作成できるようにしたいのですが、どうもうまくいきません。 順位と点数の並び替えは比較的簡単にできたのですが、それに対応した名前の並び替えがうまくできないのです。 VLOOKUP関数を使用して得点に対応した名前を表示させようとしたのですが、 順位 | 名前 | 点数 -------------------- 1 | 鈴木 | 100 -------------------- 2 | 山田 | 80 -------------------- 2 | 山田 | 80 -------------------- 2 | 山田 | 80 -------------------- 5 | 小林 | 70 となってしまい、80点の取得者が全て山田になってしまいました。 このような場合、どのようにすれば正常に並び替えを行うことができるのでしょうか。 言葉足らずで申し訳ありませんが、よろしくお願い致します。 OSはWindowsXP、ソフトはEXCEL2002を使用しています。

  • PHPとSQLによるaタグ(リンク)の貼り付け方

    PHP・SQL初心者です。 MySQLとPHPでサイトを構築しています。 データベースへの接続・テーブル内容の表示等はできるのですが、リンクをどのようにすれば貼り付けることができるのかわからなかったため質問させていただきました。 ID 名前 友達1 友達2 ・・・ 1 田中 佐藤 前田 2 山田 XXX XXX 3 佐藤 XXX XXX 4 前田 XXX XXX ・ ・ このようなデータベースを用意し、 名前が「田中」さん(ID が 1)のページに ------------------------------------------- 田中さんの友達 友達1:佐藤 友達2:前田 ------------------------------------------- このように表示し、 「佐藤」「前田」の箇所にデータベースの「ID」を利用してリンクを貼り付けたいと考えております。 データの抽出・画面への表示は、 $quryset = mysql_query("SELECT ID,名前,友達1,友達2 FROM テーブル名 WHERE ID= '1' "); while ($data = mysql_fetch_array($quryset)){} このような関数で行っております。 表示は問題なくできているのですが、 表示の「佐藤」「前田」の箇所にリンクを設定するの方法がわかりません。 「ID」 = 1 の情報を表示しているため「山田」と表示している箇所に <a href="http://XXXX.com/$data[ID].php">山田</a> と設定してリンクをつけることはできます。 友達の欄の「佐藤」「前田」の箇所にリンクをつけることができません。 データベースの「ID」欄、を利用して ------------------------------------------- 田中さんの友達 友達1:<a href="http://XXXX.com/ID名.php">佐藤</a>    ID名=佐藤さんのID欄にある2 友達2:<a href="http://XXXX.com/ID名.php">前田</a>    ID名=前田さんのID欄にある4 ------------------------------------------- ↓↓↓ IDが抽出されて ------------------------------------------- 田中さんの友達 友達1:<a href="http://XXXX.com/2.php">佐藤</a> 友達2:<a href="http://XXXX.com/4.php">前田</a> ------------------------------------------- このような形で表示できれば理想なのですが、 使用する関数やSQLの構文がわかりません。 初心者のため、考え方が根本的に間違っているのかもしません。 お詳しい方、まったく別の方法でも構いませんので解決する方法をご教授頂ければ幸いです。

    • ベストアンサー
    • PHP