在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 來識別和更新對應的行。
結論:
雖然LIMIT 子句不能直接使用ORDER 來更新多行BY 子句,本文提供的替代解決方案可以讓開發人員達到預期的結果。透過這種方式,開發者可以指定更新的起始點和行數,確保操作準確地針對目標行。
以上是如何使用 LIMIT 和 ORDER BY 更新多個具有偏移量的 MySQL 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!