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

时间:2018-07-25 18:00:10

标签: php mysql duration

我有一个页面,显示存储在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>';
    }
}

1 个答案:

答案 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>