子查询上的MySQL Interval()

时间:2012-05-26 16:05:54

标签: mysql intervals

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

SELECT name, xp FROM characters

我可以根据 XP 的数量获得 rank 字符。如果我在rank表中使用了两列,那么min和max XP就很容易了:

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

但是我希望只用一列来完成等级的下边界

更新 看起来像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));

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这可以满足您的需求吗?在这里,xp是该等级的“目标xp”。此查询返回与当前字符xp值对应的rank

示例:

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

用12000替换<character xp here>,结果是:

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

因此,该角色已达到等级1,并且比等级1的目标高出2000 xp。