我有表“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/