带for循环的mysql标量函数

标签 mysql function loops for-loop scalar

我有表“points_level”:

id | description | level
--------------------------
1  | noob        | 0
2  | rookie      | 50
3  | The boss    | 100

我需要构建一个函数,以整数形式返回关卡 ID,例如:

select calc_level(12)
result: 1

select calc_level(90)
result: 2

select calc_level(300)
result: 3

select calc_level(100)
result: 3

select calc_level(-50)
result: 1

我需要在points_level表中添加一些级别(在不久的将来),所以我不应该通过一些简单的“CASE WHEN”来计算结果,我考虑了for循环中的“CASE WHEN”,我发现了一些SSQL 的示例,但 MYSQL 没有任何示例,我不知道创建此类函数的 MYSQL 语法:(

有人可以帮助我吗?

谢谢

最佳答案

该算法相对简单 - 您需要提供的点大于或等于级别的 id:

SELECT id
FROM points_level
WHERE 
  (<points_input> >= level)
  -- For negative input, return the lowest level
  OR (<points_input> < 0 AND level <= 0)
ORDER BY level DESC LIMIT 1

http://sqlfiddle.com/#!2/07601/4

查看MySQL CREATE FUNCTION syntax将其包装在函数中的正确方法(如果您觉得确实需要)。

CREATE FUNCTION calc_level (in_points INT)
RETURNS INT
BEGIN
    DECLARE id_out INT;
    SET id_out = (
      SELECT id
      FROM points_level
      WHERE
        in_points >= level 
        OR (in_points < 0 AND level <= 0)
      ORDER BY level DESC LIMIT 1
    );
    RETURN id_out;
END

关于带for循环的mysql标量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14197552/

相关文章:

mysql - 我怎样才能加入这两个查询?

mysql - 涉及时间戳的复杂查询

c++ - 如何声明指向成员模板函数的指针?

c++ - 我可以从基于 for 循环的范围内获取项目的索引吗?

c# - 反之foreach

php - 显示所有周/月包括空计数

mysql - Express - Sequelize - 在查询中添加外表字段

javascript - 我不确定如何解决教科书中的这个匿名函数闭包问题

python - If 语句 - 这是一个字符串吗?

excel - 用 "With"和 "Do While"替换 Select 语句后,VBA 运行速度非常慢