Naoki Kurosawa
naoki_kuros****@ybb*****
2003年 3月 19日 (水) 02:07:13 JST
laplaceさん 黒澤です。 L> > テストサイトをアップデートしました。 L> > 変更内容は L> > ・浜地さんのユーザ詳細表示変更とDivision詳細表示変更 L> > ・laplaceさんのランキング表示機能です。 L> L> ランキングはsampleに占領されてましたね・・・ L> 以前のメールに書いたようなことが出来る L> SQLのコマンドはないでしょうか? というのは、 > ランキングに関するものをコミットしました。 > データ的には全バトルの中から各項目の最高スコアを > 単純にソートして5つ表示しています。 > こちらではサンプルロボットだけのテストなので、 > ほとんど同じロボットが上位を占めています。 > 同一名のロボットは除き上位5体としたいな思いますが、 > SQLの命令でできたりするのでしょうか? のことですね? ありますあります。 ただし、普通こういうときはサブクエリを使うんですが、 MySQLにはサブクエリがないので2ステップになります。 たとえばtotal_scoreの場合、 mysql> select robot_id, max(total_score) as total_score -> from battle_robots group by robot_id -> order by total_score desc limit 10; +----------+-------------+ | robot_id | total_score | +----------+-------------+ | 31 | 2860 | | 20 | 2840 | | 9 | 2836 | | 21 | 2774 | | 10 | 2740 | | 32 | 2679 | | 16 | 2654 | | 27 | 2627 | | 5 | 2604 | | 7 | 2445 | +----------+-------------+ 10 rows in set (0.01 sec) とやって、robot_idとそのtotal_scoreの最大値を取得。 これらのデータを使って1つずつrobot情報とリーグ・シーズン情報を 取得します。 具体的には、以下のselect文の最後のところに、 上記で取得したrobot_idとtotal_scoreを当てはめます。 mysql> select s.class_name, s.version, r.total_score, -> r.bullet_dmg, r.bullet_dmg_bonus, r.ram_dmg, r.ram_dmg_bonus, -> b.league_id, b.season -> from season_robots as s, battle_robots as r, battles as b -> where r.battle_id = b.battle_id -> and b.league_id = s.league_id and b.season = s.season -> and r.robot_id = s.robot_id -> and r.robot_id = 31 and r.total_score = 2860; +-----------------+---------+-------------+------------+------------------+----- ----+---------------+-----------+--------+ | class_name | version | total_score | bullet_dmg | bullet_dmg_bonus | ram_ dmg | ram_dmg_bonus | league_id | season | +-----------------+---------+-------------+------------+------------------+----- ----+---------------+-----------+--------+ | sample3.Tracker | 1.0 | 2860 | 1784 | 356 | 0 | 0 | 3 | 6 | +-----------------+---------+-------------+------------+------------------+----- ----+---------------+-----------+--------+ 1 row in set (0.00 sec) すると、1台分のデータが手に入るという寸法です。 -- Naoki Kurosawa <naoki_kuros****@ybb*****>