0

我的 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 语句中,但我不想这样做,因为还有其他几个变量要保持同步会很烦人。是否可以在不编写整个查询两次的情况下完成此操作?

谢谢

4

1 回答 1

3

手册中所述

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

从 tbl 限制 95,18446744073709551615 中选择 *;

正如您所指出的,由于不能在子句中使用该IFNULL()功能,因此在您执行命令之前,您可以执行以下操作:LIMITSELECT

SET `start` := IFNULL(`start`, 0);
SET `end`   := IFNULL(`end`  , 18446744073709551615);
于 2012-05-04T15:09:21.907 回答