问题

近两天在改一个 bug,做一个 cron 计划任务,判断并修改过期的用户会员状态。但执行之后用户状态并没有修改。就把 SQL 单独拎出来,放到 navicat(MySQL 连接工具) 里执行一下,果然报错了。

UPDATE {$DT_PRE}member SET type = 0 WHERE {$condition} ORDER BY userid DESC LIMIT 0,10000

提示 “10000” 左右的地方有符号错误,纳闷,这有什么错误的呢?

将 update 换成 select 语句,又不报错了。难道 update 和 limit 这两个关键字之间有我不知道用法?

去网上搜了一下,果然,MySQL 的 update 语句只支持更新前多少行,不支持从某行到某行。

解决

知道错在哪里,解决就方便多了。直接修改 LIMIT 0,10000, 去除位移量即可。

UPDATE {$DT_PRE}member SET type = 0 WHERE {$condition} ORDER BY userid DESC LIMIT 10000