我正在尝试为我的新闻部分创建一个自动导航,到目前为止我已经非常成功了。我说的是,但我遇到了障碍。
我的导航自动创建了一个指向每个新闻故事的链接,这很好,但我想要它做的是创建一个链接到它的月份。
这是我正在使用的代码:
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."&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
答案 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
是您的时间戳