我有个简单的问题。如何删除数据库表中除最后30行之外的所有行?例如,执行以下查询:

DELETE FROM Comments
WHERE got='$user_id'

我还需要做什么才能保留最后30行?
这就是Comments表的外观:

最佳答案

如果您的版本If MySQL支持子查询中的限制,那么您可以使用子查询来选择最近的30行。然后,可以删除除子查询中找到的行以外的所有行。

DELETE
FROM Comments
WHERE got='$user_id'
  AND got NOT IN
    (SELECT got
     FROM Comments
     ORDER BY TIMESTAMP DESC LIMIT 30)

如果MySQL版本不支持子查询中的限制,则需要将其拆分为两个单独的查询:
问题1
SELECT got FROM Comments WHERE got='$user_id' ORDER BY TIMESTAMP DESC LIMIT 30

查询1的结果应存储在单个字符串变量中(使用1,2,3...格式),并传递到查询2中。(格式化字符串时,explodeimplode函数可能很有用。)
问题2
DELETE
FROM Comments
WHERE got='$user_id'
  AND got NOT IN ($formatted_result_from_query_1)

关于php - 使用MySQL删除数据库表中除最后30行外的所有行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16631960/

10-11 14:40