2011-01-31 80 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是你的時間戳