1

我有一个表格,其中包含一个字符的等级列表,每个等级都与一个数值 (xp) 相关联。等级越高,需要的 XP 越多。我想知道构建查询以查找角色所属等级的最简单方法。这个想法是使用它是一个子查询,所以在选择字符时

SELECT name, xp FROM characters

我将能够根据XP的数量获得角色等级。如果我在排名表中使用两列来表示所需的最小和最大 XP,这很容易:

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

但我想只用一列作为等级的下限

更新: 看起来INTERVAL这是一条红鲱鱼,保留它用于搜索目的

如果我以编程方式构造查询,我可以为此使用INTERVAL()函数(MySQL 文档):

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 回答