単一のオペレーションで MySQL 行を取得および更新するクエリ
SELECT クエリと UPDATE クエリを単一のオペレーションに結合すると、効率が向上し、コードが削減されます。複雑。この記事では、サブクエリを使用せずにこの目的を達成するための解決策を検討します。
Conundrum
ユーザーは、次の MySQL クエリを組み合わせる際に支援を求めました:
SELECT * FROM table WHERE group_id = 1013 and time > 100;
UPDATE table SET time = 0 WHERE group_id = 1013 and time > 100
主な目標は、「時間」フィールドをゼロに更新しながら、同時に目的の行を取得することでした。
独創的な解決策
この解決策には、保存された行を使用することが含まれます。望ましい結果を達成するための手順。ストアド プロシージャは一連の SQL ステートメントをカプセル化し、1 つの単位として実行できます。
「update_and_retrieve」という名前の次のプロシージャによってタスクが実行されます:
<code class="mysql">CREATE PROCEDURE update_and_retrieve(IN group_id INT, IN time INT) BEGIN DECLARE updated_ids VARCHAR(255); UPDATE table SET time = 0 WHERE group_id = group_id AND time > time; SET updated_ids = (SELECT GROUP_CONCAT(fooid) FROM table WHERE group_id = group_id AND time > time); SELECT * FROM table WHERE fooid IN (updated_ids); END;</code>
プロシージャの呼び出し
ストアド プロシージャを呼び出すには、次のステートメントを実行するだけです。
<code class="mysql">CALL update_and_retrieve(1013, 100);</code>
これにより、対象となる行の「time」フィールドが 0 に更新され、更新された行が取得されて表示されます。
利点
このアプローチには、次のようないくつかの利点があります。
以上が## サブクエリを使用せずに 1 回の操作で MySQL 行を取得および更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。