免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5286 | 回复: 7
打印 上一主题 下一主题

如何实现让 mysql 只保存最近3天的数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-16 15:14 |只看该作者 |倒序浏览
一个程序一直运行大概2个月,大概每10秒往数据库里插10几条记录.由于看过的数据不太重要.只想保存3天的数据.不知道有没有什么好的方法.数据库在本机.
谢谢

论坛徽章:
0
2 [报告]
发表于 2005-11-16 15:15 |只看该作者
好像只能靠程序来判断并删除记录吧,mysql处理本身不会处理。

论坛徽章:
0
3 [报告]
发表于 2005-11-17 10:45 |只看该作者
是搞个定时器,每隔一定的时间执行一次删除.(这个时间间隔如何取,因为每10秒会进来数据执行插入操作. 会不会影响插入)

还是每执行一次插入的时候,判断有没有超过3天以外的数据,

不知道哪种情况更好一点.谢谢

论坛徽章:
0
4 [报告]
发表于 2005-11-17 13:30 |只看该作者
用PHP
用一个字段保留插入时间,比如time
然后:
$deltime = time()-3600*72;  
$sql = "delete from vote where time <$deltime"

论坛徽章:
0
5 [报告]
发表于 2005-11-17 17:28 |只看该作者
那岂不是每条记录都要判断吗,时间会不会有点长呢
还有一般删除一些记录,再插入一些记录, 存在数据库的记录就不再是升序排列的吧.检索的时候by order. 这样的话是不是意味着必需判断所有的记录.有没有什么好的方法呢.谢谢!

论坛徽章:
0
6 [报告]
发表于 2005-11-18 18:42 |只看该作者
我想这应该不会很难,你可以在要删除的表里添加一个数据类型为date 或datetime的字段比如表A 的aa

程序里的加入如下语句:

//插入数据
  "INSERT INTO A(aa) VALUES('".date('Ymd')."')";

//删除数据
$days = 3;   //修改这个值可以删除N天前的所有数据
$theDay = inval(date('Ymd')) - $days;

$delSQL = "DELETE FROM A WHERE aa <= '$theDay'";

其实数据库中有对时间日期进行运算的时间函数,我一时想不起了,只能用上面比较笨的办法来实现

论坛徽章:
0
7 [报告]
发表于 2005-11-18 18:45 |只看该作者
呵呵,漏了一个字母应该是
$theDay = intval(date('Ymd')) - $days;

其实intval()不要我想也是可以的,因为php的数据类型是弱类型啊,你不妨试试

论坛徽章:
0
8 [报告]
发表于 2005-11-18 20:01 |只看该作者
数据库里已经有一个时间子段RecordTime是timestamp类型的,每次记录插入的时候,它自动插入当前的时间.如 2005-11-16 08:52:15

具体应该怎么实现呢,谢谢各位!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP