ホームページ > データベース > mysql チュートリアル > LIMIT と ORDER BY を使用して複数の MySQL 行をオフセットで更新するにはどうすればよいですか?

LIMIT と ORDER BY を使用して複数の MySQL 行をオフセットで更新するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-01 02:11:11
オリジナル
639 人が閲覧しました

How Can I Update Multiple MySQL Rows with an Offset Using LIMIT and ORDER BY?

MySQL で LIMIT を使用した複数の行の更新

LIMIT 句を使用して行のセットを更新しようとすると、開発者は次のような場合にエラーが発生する可能性があります。クエリが正しく構造化されていません。この記事では、このような問題を調査し、代替ソリューションを提供します。

元のクエリとエラー:

次の SQL クエリを考えてみましょう:

UPDATE messages SET test_read = 1
WHERE userid='xyz'
ORDER BY date_added DESC
LIMIT 5, 5;
ログイン後にコピー

このクエリは、date_added カラムの降順で 6 行目から 5 行を更新しようとします。ただし、MySQL はこの操作でエラーを報告します。

エラーの理由:

エラーが発生するのは、LIMIT 句を ORDER BY 句と組み合わせて使用​​できないためです。複数の行を更新しようとしたとき。 LIMIT 句は返される行の数を制限し、ORDER BY 句は行が選択される順序を決定します。

代替解決策:

複数の行を更新するにはLIMIT のようなアプローチを使用して行を削除する場合は、次の回避策を使用できます。

UPDATE messages SET test_read=1
WHERE id IN (
     SELECT id FROM (
         SELECT id FROM messages
         ORDER BY date_added DESC
         LIMIT 5, 5
     ) tmp
 );
ログイン後にコピー

このクエリまずサブクエリを実行して、更新する行の ID を選択します。次に、メイン クエリはこれらの ID を使用して、更新を受け取る行をフィルタリングします。

解決策の説明:

ネストされたサブクエリは 5 つの ID を選択します。 date_added列の降順で6行目以降の行です。次に、外側のクエリはこれらの ID を使用して、対応する行を識別し、更新します。

結論:

ただし、ORDER を使用して複数の行を更新するために LIMIT 句を直接使用することはできません。 BY 句を使用すると、この記事で説明する代替ソリューションを使用して、開発者は望ましい結果を達成できます。このアプローチを使用することで、開発者は開始点と更新する行数を指定し、意図した行を正確に操作対象とすることができます。

以上がLIMIT と ORDER BY を使用して複数の MySQL 行をオフセットで更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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