1

キャラクターのランクのリストを含むテーブルがあり、それぞれが数値 (xp) に関連付けられています。ランクが高いほど、より多くのXPが必要です。キャラクターがどのランクに属しているかを調べるためのクエリを作成する最も簡単な方法を知りたいです。アイデアはそれを使用することですサブクエリなので、文字を選択するときに

SELECT name, xp FROM characters

XPの量に基づいてキャラクターのランクを取得できます。必要な最小および最大 XP のランク テーブルで 2 つの列を使用すると、簡単です。

SELECT
  name, xp
  (SELECT rank FROM ranks WHERE xp BETWEEN xp_min AND xp_max) as rank
FROM characters

しかし、ランクの下限のために1列だけでやりたいと思います

更新:INTERVALここは赤いニシンの ように見えますが、検索用に保管しています

プログラムでクエリを作成する場合、INTERVAL()関数 ( MySQL Documentation ) を使用できます。

SELECT INTERVAL(character_xp, rank1, rank2, rank3, rank4)

しかし、これを達成するためにサブクエリを使用する方法はありますか? 以下は動作しません

SELECT INTERVAL(character_xp, (SELECT rank FROM ranks ORDER by rank))

そして、これもしません:

SELECT INTERVAL(character_xp, (SELECT GROUP_CONCAT(rank ORDER BY rank) FROM ranks));

何かアドバイス?

4

1 に答える 1

1

これはあなたが必要とすることをしますか?こちらxpがそのランクの「目標XP」です。このクエリはrank、現在の文字 xp 値に対応する を返します。

例:

character xp : 12000

name     | rank | xp
Level 1    1      10000
Level 2    2      20000
Level 3    3      40000

クエリ:

SELECT
    name,
    rank,
    xp,
    (<character xp here> - xp) AS diff
FROM ranks
HAVING diff > 0
ORDER BY diff ASC
LIMIT 1

<character xp here>12000 に置き換えると、結果は次のようになります。

name     | rank | xp     | diff
Level 1    1      10000    2000

したがって、キャラクターはランク 1 に到達し、ランク 1 の目標を 2000 xp 上回っています。

于 2012-05-26T18:45:13.073 に答える