在 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中文网其他相关文章!