在新帖子旁边打印(新)3天

时间:2012-02-23 23:15:33

标签: php datetime

我有两个表类别和&讯息

类别表包含

id
name

并且posts表包含

id
name
post
added_date

日期存储如(2010-09-05)。

当我按此代码打印类别时

$query=mysql_query("select id,name from categories order by id");
while($row=mysql_fetch_assoc($query)){

echo "$row[id] : $row[name] <br />";
}

我需要在3天之后打印任何新帖子的类别旁边的单词(新)3天后它应该是没有单词的正常类别名称(新)。

问候

3 个答案:

答案 0 :(得分:0)

您需要更改查询以报告每个类别的最新发布日期。最简单的方法是使用查询中的聚合函数:

$query = mysql_query("select c.id, c.name, MAX(p.added_date) AS last_date from categories c inner join posts p on p.category_id = c.id group by c.id order by c.id"); 

然后,在打印类别列表时,如果last_date列的值早于4天,则打印(新)文本。例如:

while( $row = mysql_fetch_assoc($query) )
{     
    $id = $row['id'];
    $name = $row['name'];

    echo( "$id : $name " );

    $daysOld = ( time() - strtotime( $row['last_date'] ) ) / 86400; 
    if( $daysOld < 4 ) 
        echo( "(new)" ); 

    echo( "<br />" );
}

答案 1 :(得分:0)

如果这是一个数据库查询,那么您应该寻找以下内容:

SELECT id, name, post, date_added, 
  IF(date_added > NOW() - INTERVAL 3 DAY, NULL, 'NEW') AS status
FROM table
ORDER BY date_added DESC

然后你可以使用:

if (isset($row['status'][0])) {
    echo "(", $row['status'], ")";
}

这将允许代码通过仅更改SQL

来处理其他“状态”值

答案 2 :(得分:0)

<?php 
$MyTime = strtotime('+3 days');
$sDateFormat = 'l F d Y'; 
printf("Expires: %s\n", date($sDateFormat, $MyTime)); 
?>