在单个操作中检索和更新 MySQL 行的查询
将 SELECT 和 UPDATE 查询组合到单个操作中可以提高效率并减少代码复杂。本文探讨了一种不使用子查询即可实现此目标的解决方案。
难题
用户在组合以下 MySQL 查询时寻求帮助:
SELECT * FROM table WHERE group_id = 1013 and time > 100;
UPDATE table SET time = 0 WHERE group_id = 1013 and time > 100
主要目标是检索所需的行,同时将其“时间”字段更新为零。
巧妙的解决方案
解决方案涉及使用存储的程序以达到预期的结果。存储过程封装了一系列 SQL 语句,可以作为一个单元执行。
以下名为“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>
这会将符合条件的行的“时间”字段更新为零,然后检索并显示这些更新的行。
优点
这种方法有几个优点:
以上是## 如何在不使用子查询的情况下在单个操作中检索和更新 MySQL 行?的详细内容。更多信息请关注PHP中文网其他相关文章!