ホームページ > データベース > mysql チュートリアル > MySQL の LIMIT 句で変数を使用するにはどうすればよいですか?

MySQL の LIMIT 句で変数を使用するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-18 02:33:09
オリジナル
674 人が閲覧しました

How Can I Use Variables in MySQL LIMIT Clauses?

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 句で変数を使用するには、次の手順:

  1. 結果を保存する一時テーブルを作成します。クエリ。
  2. クエリの結果を一時テーブルに挿入します。
  3. 一時テーブルで LIMIT 句を含む SELECT ステートメントを使用します。
  4. 取得後に一時テーブルを削除します。望ましい結果。

の場合例:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート