每次运行php脚本时我想删除id
之前的旧条目。但MySQL抛出了这个错误:
#1111 - Invalid use of group function
这是查询:
DELETE FROM am_shoutbox WHERE MAX(msg_id)-160 > msg_id
这是什么问题?我尝试通过首先选择最高id
到php然后使用第二个查询删除来解决它,但为了更好的性能,我想在一个可能的情况下执行此操作。
我希望有人能弄清楚上面的查询有什么问题。
答案 0 :(得分:3)
您无法在WHERE
子句中使用聚合函数。您可以尝试这样的事情(使用检索MAX(msg_id)
的子查询):
DELETE FROM am_shoutbox
WHERE ( SELECT *
FROM ( SELECT MAX(msg_id)
FROM am_shoutbox ) m ) - 160 > msg_id
答案 1 :(得分:0)
错误描述的组函数的无效使用是由MAX(msg_id)
子句中的WHERE
使用的。您可以在select / subselect或HAVING
子句中使用它:
delete from am_shoutbox
where
(select (max(ams.msg_id) FROM am_shoutbox ams) - 160) > msg_id
*您可能需要在子查询中指定表别名,如上所述
或更优雅,更好的表现方式:
delete from am_shoutbox
having (max(msg_id) - 160) > msg_id