• ベストアンサー

PHPとMysql での順位付け

PHPのバージョンは4.2.3です。 Mysqlにデータを収め 競馬の競争成績の管理用のHPを作っているのですが、 ExcelでいうところのRANK関数のような その列の中でその値が何番目かを調べる機能をつけたいのですが、WEBや本などで調べてみたのですが いまいちわかりませんでした。 OracleにはRANK関数があるようですが Mysqlはないですよね? なんとなくMAX関数で 最大値を抜いてループさせ その回数を数えるとかすれば できそうな気もしてるのですが、 具体的に最大値を抜いてさらにループさせるとか どのようにしたら良いかわかりません。 わかりづらい文章かもしれませんが よろしくお願いします。

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

>その列の中でその値が何番目かを調べる機能 列の中でソートして全てのレコード内の何番目かだけなら、大きい方から数えるとして、その値より大きいものがいくつあるかカウントして1足せばいいのでは? 列名 retu 値 xx として以下のようなsql文で select count( * )+1 as rank from table_a where retu > xx; sql4.0 では出来ましたが、これでどうでしょうか? そんな単純な話でなければ、テータイメージなどを補足して頂かないとちょっと解りかねます。

DRAGONEMK
質問者

お礼

なるほど 大変参考になりました。 試してみまありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

僕がmysqlを使う理由はとにかく読み出しが速い事で、反面複雑なSQLやjoinを多用すると急に重くなってしまう事もあるので、特に集計作業等はリアルタイムに行うのではなく、集計用のスクリプトをスケジュール実行したりしています。 このような順位付けも僕がやるとしたら、集計用のテーブルを別に作って、元データをソートして順位を付けながら一定時間おきに更新するような事をするでしょう。 どのような順位付けをするのかわかりませんが、 >なんとなくMAX関数で >最大値を抜いてループさせ >その回数を数えるとかすれば >できそうな気もしてるのですが、 この文章から想像するに、1(馬)対多(レース成績?)のデータのMAX値の順位を付けるという事ですか?そうしたらMAX値を馬ごと取得して配列に入れ($配列名[馬ID]=MAX値みたいな感じでどうでしょう)、ソート、そしてループさせて順位をカウントしながら集計用テーブルに挿入、という手順ではどうでしょうか?mysqlはこのような単発のSQLはチョッ速ですから、馬の数だけSQLを実行させてもそれほど時間はかからないかな、と思います。まあ、馬の数にもよりますけど。

DRAGONEMK
質問者

補足

集計対象の馬が何十頭かいて 基準は獲得した賞金額で その馬がその中で何番目かというのを 表示させたいということなんです。 なるほどカウントした順位を テーブルに挿入というのは 頭にありませんでしたありがとうございます。 もう少しやってみます。

すると、全ての回答が全文表示されます。
写真の発色が悪い
このQ&Aのポイント
  • 新品購入直後のMFC-J4940DNで写真を印刷すると発色が鮮やかでなく、全体が暗くなる問題が発生しています。
  • 接続は無線LANで行っており、使用環境はiOSです。
  • 改善方法や設定について教えてください。
回答を見る

専門家に質問してみよう