从MySQL删除旧记录的问题

时间:2014-07-01 00:14:56

标签: php mysql sql

每次运行php脚本时我想删除id之前的旧条目。但MySQL抛出了这个错误:

#1111 - Invalid use of group function

这是查询:

DELETE FROM am_shoutbox WHERE MAX(msg_id)-160 > msg_id

这是什么问题?我尝试通过首先选择最高id到php然后使用第二个查询删除来解决它,但为了更好的性能,我想在一个可能的情况下执行此操作。

我希望有人能弄清楚上面的查询有什么问题。

2 个答案:

答案 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