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;

null 値を渡す場合、クエリの制限を解除するにはどうすればよいですか?

渡すmy_procedure(1,null,null)とエラーが返されます。

クエリ全体を IF ステートメントでラップできることはわかっていますが、同期を維持するのが煩わしい変数が他にもいくつかあるため、そうしたくありません。クエリ全体を 2 回書かずにこれを達成することは可能ですか?

ありがとう

4

1 に答える 1

3

マニュアルに記載されているように:

特定のオフセットから結果セットの最後までのすべての行を取得するには、2番目のパラメーターに大きな数値を使用できます。このステートメントは、96行目から最後の行までのすべての行を取得します。

SELECT * FROM tbl LIMIT 95,18446744073709551615;

ご指摘のとおり、句IFNULL()内で関数を使用することはできないため、コマンドの前に次のことができます。LIMITSELECT

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