使用php仅显示确定持续时间内的数据

使用php仅显示确定持续时间内的数据,php,mysql,duration,Php,Mysql,Duration,我有一个页面显示存储在mysql数据库中的帖子。当文章被创建时,用户可以选择他们希望文章在多长时间内可见,我正试图找出如何在确定的时间内只显示文章。下面是我的一些代码(希望能显示我正在尝试的逻辑) //查询数据库 $sql=fetch_assoc()){ //邮寄日期 $date_of_post=$row['date_of_post']; //该职位的持续时间以天为单位,如7天。 $duration=$row['duration']; //正在尝试将持续时间添加到日期 $newdate=stro

我有一个页面显示存储在mysql数据库中的帖子。当文章被创建时,用户可以选择他们希望文章在多长时间内可见,我正试图找出如何在确定的时间内只显示文章。下面是我的一些代码(希望能显示我正在尝试的逻辑)

//查询数据库
$sql=fetch_assoc()){
//邮寄日期
$date_of_post=$row['date_of_post'];
//该职位的持续时间以天为单位,如7天。
$duration=$row['duration'];
//正在尝试将持续时间添加到日期
$newdate=strotime($duration,$date\u of\u post);
//仅显示仍然有效的帖子,例如日期+持续时间小于今天的日期
如果($newdate>now()){
回声“职位头衔”;
回显“发布日期:”.$Date.“

”; } }
您可以使用
where
子句和
date\u add
函数直接在SQL查询中应用此筛选器。只需将
duration
天数添加到
date\u of_post
值中,并将其与
NOW()进行比较即可

请注意,由于将
持续时间
值存储为varchar而不是int,因此需要
将持续时间值转换为
带符号int

下面是一个例子,扩展了
date\u add
,以更清楚地了解正在发生的事情

select
    *
from
    posts
where
    date_add
    (
        date_of_post,
        INTERVAL convert(duration, SIGNED INT) DAY
    ) > NOW()

作为补充说明,您应该始终尝试在查询中过滤数据,而不是在PHP脚本中过滤数据。不要只在脚本中选择整个表,让SQL做尽可能多的工作。RDBMS比PHP高效得多,您将节省大量开销(例如通过网络发送的数据量,以及必须使用多少RAM来存储PHP使用的结果等).

创建帖子时,用户可以选择他们希望帖子显示多长时间,因此如何存储这些信息使用
WHERE
子句。一些合理的代码缩进将是一个好主意。它帮助我们阅读代码,更重要的是,它将帮助您为自己的利益调试代码。您可能会被要求在几周/几个月内修改此代码,最终您将感谢我。这是您的第一个错误,我希望这是您的第一个错误。将日期存储在日期、日期时间或时间戳列类型中,然后您可以轻松地在查询中使用它们提示:使用
DATE\u add
持续时间
(转换为int)添加到
DATE\u of\u post
,并将其与
NOW()进行比较。
select
    *
from
    posts
where
    date_add
    (
        date_of_post,
        INTERVAL convert(duration, SIGNED INT) DAY
    ) > NOW()