带有for循环的mysql标量函数

时间:2013-01-07 14:04:37

标签: 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语法:(

有人可以帮帮我吗?

由于

1 个答案:

答案 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