具有动态结果LIMIT的MySQL存储过程

时间:2012-05-04 15:05:46

标签: mysql stored-procedures

我的MySQL数据库中有一个存储过程,需要弄清楚如何限制返回以创建一些分页。

一些伪代码:

CREATE PROCEDURE `my_procedure`(IN member_id INT, IN start INT, IN end INT)
BEGIN
SELECT * FROM member_activity WHERE `member_id` = member_id
<if start is not null>
LIMIT start, end
<endif>
END;

如果我传递一个空值,我该如何简单地取消限制查询?

传递my_procedure(1,null,null)会返回错误。

我知道我可以将整个查询包装在IF语句中,但我宁愿不这样做,因为还有其他一些变量令人讨厌保持同步。是否可以在不编写整个查询两次的情况下完成此操作?

由于

1 个答案:

答案 0 :(得分:3)

the manual中所述:

  

要从特定偏移量检索所有行直到结果集的末尾,可以使用一些大数字作为第二个参数。此语句检索从第96行到最后一行的所有行:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

正如您所指出的那样,您可以在LIMIT命令之前使用SELECT子句中的IFNULL()函数:

SET `start` := IFNULL(`start`, 0);
SET `end`   := IFNULL(`end`  , 18446744073709551615);