我有一个页面,显示存储在mysql数据库中的帖子。创建帖子后,用户可以选择他们希望看到该帖子的时间,而我正在尝试弄清楚如何仅在确定的持续时间内显示该帖子。这是我的一些代码(希望能显示我正在尝试的逻辑)。
//Query database
$sql = <<<SQL
SELECT *
FROM `posts`
SQL;
if(!$result = $db_connection->query($sql)){
die('There was an error running the query [' . $db_connection->error . ']');
}
while($row = $result->fetch_assoc()){
//The date the post was made
$date_of_post = $row['date_of_post'];
//The duration of the post in days eg 7.
$duration = $row['duration'];
//Attempting to add duration to date
$newdate = strtotime($duration, $date_of_post);
//Only show posts that are still valid, eg date + duration is less than today's date
if($newdate > now()){
echo '<h2>Post Title</h2>';
echo '<p>Date of Posted:'.$date.'</p>';
}
}
答案 0 :(得分:1)
您可以使用where
子句和date_add
函数直接在SQL查询中应用此过滤器。只需将duration
天添加到date_of_post
值中,然后将其与NOW()
进行比较。
请注意,由于您将duration
值存储为varchar而不是int,因此需要将持续时间值convert
存入signed int
。
这里是一个示例,其中date_add
的展开是为了更清楚地了解正在发生的事情。
select
*
from
posts
where
date_add
(
date_of_post,
INTERVAL convert(duration, SIGNED INT) DAY
) > NOW()
作为旁注,您应该始终尝试在查询中而不是PHP脚本中过滤数据。不要只在脚本中选择整个表,而是让SQL尽可能多地工作。 RDBMS比PHP效率高得多,您将节省很多开销(例如,通过网络发送的数据量,以及必须使用多少RAM来存储要使用的PHP结果等)。 / p>