MySQL の LIMIT 句での変数の使用
MySQL では、SELECT ステートメント内の LIMIT 句で変数を使用しようとすると、一般的な問題が発生します。このような機能は簡単そうに見えますが、ネイティブにはサポートされていません。
問題:
my_size (type: INTEGER) などの入力パラメータを組み込もうとすると、 LIMIT 句に挿入すると、次のエラーが発生します。発生した問題:
SELECT * FROM some_table LIMIT my_size;
Error: You cannot use variables in LIMIT clauses.
回避策:
残念ながら、MySQL 5.5.6 より前のバージョンでは、この制限を直接克服する方法はありません。ただし、一時テーブルとストアド プロシージャを利用する回避策が存在します。
解決策:
MySQL 5.5.6 以降で LIMIT 句で変数を使用するには、次の手順:
の場合例:
SET @my_size = 10; CREATE TEMPORARY TABLE tmp_table AS SELECT * FROM some_table; INSERT INTO tmp_table (SELECT * FROM some_table); SELECT * FROM tmp_table LIMIT @my_size; DROP TEMPORARY TABLE tmp_table;
代替アプローチ:
MySQL 5.5.6 より前のバージョンでは、ROWNUM で副選択を使用する代替アプローチが利用可能です。
SET @limit = 10; SELECT * FROM ( SELECT instances.*, @rownum := @rownum + 1 AS rank FROM instances, (SELECT @rownum := 0) r ) d WHERE rank < @limit;
注: このアプローチにより、次のような結果が生じる可能性があります。前述の回避策と比較してパフォーマンスが低下します。
以上がMySQL の LIMIT 句で変数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。