【发布时间】:2011-06-15 03:36:08
【问题描述】:
我有一个处理订单的数据库 - 订单是在流程开始时插入的,但如果流程未完成(他们离开页面等),则未填写“已确认”字段,这允许管理员知道哪些订单已完成。
目前我无法调整网站管理数据的方式,但是我可以添加某种每周清理这些“已确认”= 0 的数据库字段的方式。
我将如何自动执行此操作?有没有办法每周、每月、每年运行一次这样的查询?
编辑:
如果我添加了网站存储在我无法访问盒子本身的受限共享服务器上怎么办?
【问题讨论】:
我有一个处理订单的数据库 - 订单是在流程开始时插入的,但如果流程未完成(他们离开页面等),则未填写“已确认”字段,这允许管理员知道哪些订单已完成。
目前我无法调整网站管理数据的方式,但是我可以添加某种每周清理这些“已确认”= 0 的数据库字段的方式。
我将如何自动执行此操作?有没有办法每周、每月、每年运行一次这样的查询?
编辑:
如果我添加了网站存储在我无法访问盒子本身的受限共享服务器上怎么办?
【问题讨论】:
您可以使用 CRON 来执行这项工作。但是,如果您需要从未完成的订单中清理数据库,只为人类显示已完成的订单,并且您不将它们导出到其他地方(例如经理每天访问一次后端并手动查找已完成的订单),我建议您不要雇用CRON 为此。您可以添加几行代码,这些代码将在每次访问后端时从数据库中删除旧条目。
DELETE 查询的执行速度非常快,因此不会出现性能问题。实际数据删除将仅应请求执行。此外,您不需要 CRON(一些便宜的托管服务提供商不提供访问此服务的权限)。
【讨论】:
我通常创建一个 PHP 页面来执行该操作,然后使用 cURL 和 CRON 作业安排该页面运行。
【讨论】:
如果它是类 Unix 机器,我会将清理工作放在 PHP CLI 脚本(即从命令行而不是在 Web 服务器模块中运行的 PHP 脚本)中,然后从 cronjob 调用它。 Cron 是一个用于这个确切目的的守护进程:以预定义的时间间隔运行事物。 Cronjobs 在 crontab 文件中定义,通常在 /etc/crontab(对于 root 用户)和 ~/.crontab(对于普通用户);许多发行版都提供了安全编辑此文件的工具。
请尝试man cron 和man crontab 了解详情。另外:http://en.wikipedia.org/wiki/Cron
【讨论】:
设置一个 cron 作业并执行 wget 以运行您想要自动化的脚本。查看链接了解更多信息http://www.phpmyvisites.us/faq/crontab-launch-automatically-statistics-archiving-process-every-62.html.
【讨论】:
编写一个简短的 PHP 脚本来更新/删除 mysql 记录,
然后,如果您可以访问 linux/unix 框,请输入 crontab -e,然后会提示您选择要查看当前 cronjobs 的编辑器,选择默认并添加以下行:
0 0 * * 0 /usr/bin/php /path/to/script.php
请在设置之前检查 /usr/bin/php 是否存在(如果它不存在,则需要安装 php-cli,否则文件可能也在 /usr/sbin/php)。
此 cronjob 每周运行一次,如果您想更改频率,请使用手册页了解如何操作。
另外,您确定要自动运行此脚本吗?据我了解,您需要有人先查看不完整的订单,然后才能清理它们。如果你运行这个 cronjob,你可能会遇到有人没有完成他的命令但任何证据都被删除的情况。
希望这会有所帮助,
【讨论】: