1

レベルというテーブルがあります。

id  |  level  |  points(minimum)  
-------------------------
1   |  1      |  0 
2   |  2      |  100 
3   |  3      |  200 

189ポイントあるとしましょう。ユーザーがどのレベルにいるかを確認するにはどうすればよいですか?

編集:

ベストアンサーが選ばれました。SELECTクエリの前にEXPLAINを追加してリクエストを比較していますが、次の結果が得られます。

id  |  select_type  |  table  |  type  |  possible_keys  |  key  |  key_len  |  ref  |  rows  |  Extra
-------------------------------------------------------------------------------------------------------------
1   |    SIMPLE     |  level  |   ALL  |       NULL      |  NULL |    NULL   |  NULL |  8   |  Using where


id  |  select_type  |  table  |  type  |  possible_keys  |  key  |  key_len  |  ref  |  rows  |  Extra
-------------------------------------------------------------------------------------------------------------
1   |    SIMPLE     |  level  |   ALL  |       NULL      |  NULL |    NULL   |  NULL |  8   |  Using where; Using filesort

どちらが良いか速いかをどうやって知ることができますか?

4

4 に答える 4

6

プレーヤーが現在いるレベルを探している場合は、プレーヤーが現在持っているポイントよりも少ないポイント要件で最大レベルを選択する必要があります。

select max(level) from level where points <= 189;

min_pointsこれは、各レベルにとmax_points量がある場合にうまく機能する可能性があります。

id | level | min_points | max_points
------------------------------------
1  |   1   | 0          | 99
2  |   2   | 100        | 199
3  |   3   | 200        | 299

そうすれば、クエリを集約する必要はありません。

select * from level where min_points <= 189 && max_points > 189;

編集:うーん、私は今夜私のSQLを台無しにし続けます、LOL。

于 2009-12-09T03:20:49.733 に答える
2

これには、「between」やその他の種類の集計関数はまったく必要ありません。ポイントよりも小さいすべての行を選択し、降順で並べ替えると、最初の行が正しい行になります。

select level from Level where points <= 189 order by points desc limit 1

(MySQLを想定しています..MySQLをお持ちでない場合、「limit」は機能しない可能性があります)

于 2009-12-09T03:22:27.187 に答える
0

私はあなたが何を意味するのかよくわかりませんが、これはあなたが望むものだと思います:

SELECT `level` FROM `Level` WHERE `points`=189
于 2009-12-09T03:20:05.973 に答える
0
select max(level) from level where points <= 189

これは、テーブルの「ポイント」フィールドがそのレベルを達成するための最小ポイントであると想定しています。

于 2009-12-09T03:25:13.123 に答える