[Rumble-jp-dev] テストサイトアップデート

Back to archive index

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*****>





Rumble-jp-dev メーリングリストの案内
Back to archive index