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