0

我有表'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 语法:(

有人可以帮助我吗?

谢谢

4

1 回答 1

1

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

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

查看MySQLCREATE FUNCTION语法以了解将其包装在函数中的正确方法(如果您觉得确实需要它)。

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
于 2013-01-07T14:11:48.343 回答