2011-01-31 55 views
0

我试图为我的新闻部分创建一个自动导航,到目前为止,我一直很成功。那么我说,但我碰到了一个障碍。PHP&MySql导航问题...随着日期

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

这是我使用的代码:

<li>January</li> 
<li>February</li> 
<li>March</li> 
<li>April</li> 
.....etc 
:虽然我希望它看起来像这里面吐出来,看起来像这样

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

无序列表

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>"; 
    } 
} 

+0

不,只是我发布新闻报道的月份清单。没有它重复。 – Martin 2011-01-31 16:12:14

回答

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,所以你必须处理转换为文本)

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应用两者,所以你需要TW吃一点。 $row->date_added是你的时间戳