MySQL Interval() 子查询

标签 mysql intervals

我有一个表,其中包含角色的排名列表,每个排名与一个数值(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 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));

有什么建议吗?

最佳答案

这能满足您的需要吗?在这里,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。

关于MySQL Interval() 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767802/

相关文章:

mysql - 如何对两个不同表的两个不同列的数据求和?

python - 创建具有特定值的白色间隔的正常颜色条

php - PHP 默认的 ./configuration 选项是什么?

mysql - 如果某个值存在,则从表中选择记录,如果不存在,则选择其他记录

php - 将大文件分成两半

php - 重复事件

python时间间隔重叠持续时间

sql - GROUP BY 整数值的区间

划分一维空间的算法