每个用户只保留10条记录

时间:2010-07-20 14:56:57

标签: php mysql

我在我的网站上运行积分系统,所以我需要将用户的不同操作的日志保存到数据库中。问题是我有太多用户并永久保留所有记录可能导致服务器过载...我有办法只保留每个用户10条记录并自动删除旧条目? mysql是否有一些功能呢?

提前致谢

6 个答案:

答案 0 :(得分:3)

您可以添加一个触发器来处理删除旧条目。 例如,

DELIMITER //
CREATE definer='root'@'localhost' TRIGGER afterMytableInsert AFTER INSERT ON MyTable
FOR EACH ROW
BEGIN
    DELETE FROM MyTable WHERE user_id = NEW.user_id AND id NOT IN 
    (SELECT id FROM MyTable WHERE user_id = NEW.user_id ORDER BY action_time DESC LIMIT 10);
END//

答案 1 :(得分:2)

只需运行一个删除第11个n记录的每小时cron作业。

答案 2 :(得分:2)

在插入记录之前,您可以先检查用户的数量。如果他们有> = 10删除最旧的那个。然后插入新的。

答案 3 :(得分:1)

如果您的目标是让数据库确保对于给定的表,每个给定的子键(用户)永远不会超过N行,那么解决此问题的正确方法是:

如果您已经在使用存储过程进行数据访问,那么修改插入过程最有意义,否则触发器将是最简单的解决方案。

或者,如果您的目标是定期删除旧数据,那么使用cron作业启动存储过程来修剪旧数据将是最有意义的。

答案 4 :(得分:0)

DELETE FROM Table WHERE ID NOT IN (SELECT TOP 10 ID FROM Table WHERE USER_ID = 1) AND USER_ID = 1

更清晰的版本

DELETE FROM Table
    WHERE ID NOT IN
    (
        SELECT TOP 10 ID  FROM Table WHERE USER_ID = 1
    )
    AND USER_ID = 1

答案 5 :(得分:0)

为用户插入新记录时。在此之前做一个这样的查询(不要忘记where - 条件):

DELETE FROM tablename WHERE userID = 'currentUserId' LIMIT 9, 999999

之后,您可以插入新数据。这样可以使每个用户的数据始终保持10条记录。

INSERT INTO tablename VALUES(....)