-1

使用博客教程,我想有一个选项,您可以在“主”索引页面上查看帖子,直到帖子活跃 x 天。在 x 天的这段时间之后,我希望在数据库中将帖子设置为“过期”。任何人都可以阐明实现这一目标的最佳方法吗?

4

2 回答 2

0

可能最好的方法是使用 SQL 选择语句。MySQL 有许多内置的日期方法。但首先,我们需要定义您想要完成的任务。另请注意,我们使用的字段 ( created_at, allotted_time) 都是DATE字段。

您要做的只是显示当前正在运行的帖子。由于我们知道广告开始的日期,我们可以从当前日期中减去开始日期,以计算出距离广告到期还有多长时间。这可以通过DATEDIFF函数和CURDATE函数来完成。

DATEDIFF(CURDATE(), `created_at`)

如果您尝试执行上述语句,您会注意到它返回一个整数,即自广告首次创建以来经过的天数。由于DATEDIFF返回一个整数,我们还需要转换allotted_time为一个整数。

DATEDIFF(`allotted_time`, `created_at`)

现在我们知道广告已经运行了多少时间,以及它必须在创建之日后运行多少天。显然,如果广告在创建日期和分配时间之间运行的天数少于它仍在运行的天数。

WHERE DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)

把这些放在一起,我们会得到一个类似的声明。

SELECT `id`
FROM `ads`
WHERE
    DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)
于 2012-04-11T23:28:22.980 回答
0

如果您使用分页,则使用:

注意 这里 $x 是你的 intarval

$this->Post->recursive = 0;
$this->paginate = array(
            'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
        );
$this->set('posts', $this->paginate());

对于正常的 find() 使用这个:

$this->Post->find('all', 
                   array(
                    'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
                   )
                 );
于 2012-04-12T06:45:59.267 回答