我的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语句中,但我宁愿不这样做,因为还有其他一些变量令人讨厌保持同步。是否可以在不编写整个查询两次的情况下完成此操作?
由于
答案 0 :(得分:3)
如the manual中所述:
要从特定偏移量检索所有行直到结果集的末尾,可以使用一些大数字作为第二个参数。此语句检索从第96行到最后一行的所有行:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
正如您所指出的那样,您可以在LIMIT
命令之前使用SELECT
子句中的IFNULL()
函数:
SET `start` := IFNULL(`start`, 0);
SET `end` := IFNULL(`end` , 18446744073709551615);