PHP& MySql导航问题...有了日期

时间:2011-01-31 15:54:41

标签: php mysql

我正在尝试为我的新闻部分创建一个自动导航,到目前为止我已经非常成功了。我说的是,但我遇到了障碍。

我的导航自动创建了一个指向每个新闻故事的链接,这很好,但我想要它做的是创建一个链接到它的月份。

这是我正在使用的代码:

function pir_news_nav($nav_y) {
    $mysql = mysqli_connect("HOST", "DB", "PW", "TABLE");
    $newsQ = "SELECT * FROM tbl_news WHERE newsDateAdded LIKE '%". $nav_y ."%' AND newsActive=1 ORDER BY newsDateAdded ASC ";
    $newsRes = mysqli_query($mysql, $newsQ);
        while ($newsRow = mysqli_fetch_array($newsRes)) {
            $newsTitle = $newsRow["newsTitle"];
            $date = $newsRow["newsDateAdded"];
        $y = date("Y", strtotime($date));
        $m = date("m", strtotime($date));
        $month = date("F", strtotime($date));

        echo "<li><a href='?year=".$y."&amp;month=".$m."'>".$month."</a></li>";
    }
}

吐出一个看起来像这样的无序列表

<li>January</li> 
<li>February</li> 
<li>March</li> 
<li>March</li> 
<li>March</li> 
<li>April</li> 
.....etc

我希望它看起来像这样:

<li>January</li>
<li>February</li>
<li>March</li>
<li>April</li>
.....etc

3 个答案:

答案 0 :(得分:2)

使用MySQL的“GROUP BY”。

我通常要仔细查看如何获得我想要的结果,但我不知道如何:

$newsQ = "SELECT MONTH(newsDateAdded) as month FROM tbl_news WHERE newsDateAdded LIKE '%". $nav_y ."%' AND newsActive=1 ORDER BY newsDateAdded ASC GROUP BY month";

当然,这假设您只需要在此查询之外的月份。看起来这就是你正在做的事情,但无论如何都是假设。

这是MONTH()上的MySQL页面。 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_month

(请注意,月份将返回1-12,因此您必须将该转换处理为文本。)

答案 1 :(得分:0)

如果我理解你 - 你想要选择所有的新闻,但每个月只显示一次? 我建议你在布尔数组中使用来表明你是否已经每个月都写过....

答案 2 :(得分:0)

你也可以试试这个:

    $archiveList=array();
    foreach($result->result() as $row)
    {
        $archiveList[]=array('text'=>date('F Y', strtotime($row->date_added)), 'link'=>date('Y/m', strtotime($row->date_added)));
    }

    foreach ($archiveList as $k=>$na)
        $new[$k] = serialize($na);
    $uniq = array_unique($new);
    foreach($uniq as $k=>$ser)
        $clean[$k] = unserialize($ser);

    return $clean;

使用数据库中日期列表中的唯一值构建数组(此应用程序案例中为DATETIME)

修改 从CI应用程序中获取,因此您需要稍微调整一下。 $row->date_added是您的时间戳