在單一操作中擷取和更新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中文網其他相關文章!