我的表'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语法:(
有人可以帮帮我吗?由于
答案 0 :(得分:1)
算法相对简单 - 您需要提供的点数大于或等于level
的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