0

我在http://kees.een-site-bouwen.nl/agenda做了一个日记,其中可以有特定日期的事件。您可以使用此处的表单添加事件:http: //kees.een-site-bouwen.nl/evenementform

如您所见,我有 3 个字段 'Datum, Van & Tot'(翻译:Datum = date,Van = From,Tot = until)如果该特定日期的时间到期,我想运行一个删除该特定行的脚本从数据库。

我在google上搜索,发现了一些类似MYSQL Trigger和PHP cronjob的东西,但我不知道是否有更简单的方法可以做到这一点?或如何准确地做到这一点。

我的数据库结构如下所示:

agenda // diary
- - - - // not added the whole structure.
idagenda
titel
waar
www
email
activated
....
....

agendadatum // diary dates
- - - - - -
id
datum
van
tot
idagenda

如您所见,我正在使用联接向一个事件添加更多日期。如果日期 = 今天,我如何触发日期时间从数据库中删除行?

注意:我正在使用 Codeigniter 框架。

4

3 回答 3

0

如果我理解正确:

CREATE TRIGGER deleteRows AFTER UPDATE,INSERT ON myTable
FOR EACH ROW BEGIN
    DELETE FROM myTable WHERE Datum = NOW()
END;
于 2013-08-22T10:03:28.583 回答
0

你可以设置一个钩子。并使用类似的功能

$this->db->where('tot <', date('Y-m-d H:i:s'));
$this->db->delete('agendadatum');

我的 codeigniter 有点生疏,但该查询应该在每次页面加载时删除所有“旧”条目。因此,如果您要追求高流量,这将无法维持。

每小时/每天运行一次 cronjob 可能是“最干净”的方式。这将要求您在所有议程数据选择上设置 where 条件,强制“tot”日期在未来。否则,您可能会看到过期的条目。

编辑:

如果您将钩子定义为:

$hook['post_controller_constructor'] = array(
                              'class'    => '',
                              'function' => 'delete_old_entries',
                              'filename' => 'agenda.php',
                              'filepath' => 'hooks',
                              'params'   => array()
                          );

并创建一个名为agenda.phpapplication/hooks 的文件,如下所示:

<?php
function delete_old_entries() {
    $CI =& get_instance();
    $CI->load->database();
    $query = $CI->db->query(" DELETE FROM agendadatum WHERE tot < NOW(); ");
}

它应该工作。然而,这是从我能找到且未经测试的内容拼凑而成的。所以它可能有效,也可能无效。但是即使不是这样,沿着这些思路的东西也应该可以解决问题。

于 2013-08-22T10:38:20.293 回答
0

MySQL 有一个内置的事件调度器,它基本上允许您在预定时间运行任意 SQL 代码。例如,您可以每天清除一次数据库。

但是,我从您的另一个问题中知道您将项目托管在共享主机上,不幸的是,这些主机经常禁用该功能。查看此手册页以了解该功能是否在您的服务器上处于活动状态。

于 2013-08-22T15:14:34.113 回答