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