2014-01-06 24 views
3

我在MySQL數據庫中插入新聞日期與timestamp。現在我需要先進的檔案我的消息是這樣的:高級新聞檔案年/月使用PHP MySql

2013 

    July (4) 
     News 1 
     News 2 
     News 3 
     News 4 
    December (2) 
     News 1 
     News 2 
    NovemberPrint (4) 
     News 1 
     News 2 
     News 3 
     News 4 
2014 
    January (8) 
     News 1 
     News 2 
     News 3 
     News 4 
     News 5 
     News 6 
     News 7 
     News 8 

現在我需要任何PHP functionMySQL SELECT結構打印此使用PDO或MySQL查詢。

在線實例HERE

編輯:我發現這個問從Here

$sql = "SELECT YEAR(FROM_UNIXTIME(timestamp)) AS YEAR, 
       MONTHNAME(FROM_UNIXTIME(timestamp)) AS MONTH, 
       COUNT(*) AS TOTAL 
     FROM NEWS GROUP BY YEAR, MONTH ORDER BY YEAR DESC, MONTH "; 
$newsdata = DataAccess::ArrayFetch($sql); 

$currentYear = null; 

foreach($newsdata AS $news){    
    if ($currentYear != $news['YEAR']){ 
    echo '<h2>'.$news['YEAR'].'<h2>'; 
    $currentYear = $news['YEAR']; 
    } 
echo '<dd>'.$news['MONTH'].'<dd><dt>'.$news['TOTAL'].'</dt>'; 
} 

但是,這僅打印數量和GROUP BY年廣告一個月。我需要在每個月後列出文章。

+3

我需要很多呢!但你做了什麼來解決你的問題? – sergio

+0

我們需要你的代碼Alex.DX,除非你希望我們從頭開始編碼,這是不會發生的。 – JakeGould

+0

@Sergio和JakeGloud我在編輯中添加了簡單的代碼。 –

回答

3

如果您還想要各個文章的名稱,則不能使用GROUP BY。只需獲取整個列表,然後按年份和月份分組成一個數組。

當您迭代結果數組時,您可以計算每年/每月的新聞項目以生成總數。

<ul> 
    <?php 
    foreach ($nav as $k => $v) { 
     ?> 
     <li><?php echo $k ?> 
      <ul> 
      <?php 
      foreach ($v as $k2 => $v2) { 
       ?> 
       <li><?php echo $k2.' ('.sizeof($v2).')' ?> 
        <ul> 
         <?php 
         foreach ($v2 as $k3 => $v3) { 
          ?> 
          <li><?php echo $v3 ?></li> 
          <?php 
         } 
         ?> 
        </ul> 
       </li> 
       <?php 
      } 
      ?> 
      </ul> 
     </li> 
     <?php 
    } 
    ?> 
</ul> 
0

你會想使用MySQL這樣的:

ORDER BY DATE(actionTime) 

日期公正的秩序,而不是將它們分組的結果,並且只需更換*您COUNT(*)。

0

試試:

SELECT YEAR(creation_date), MONTH(creation_date), COUNT(id) from news GROUP BY YEAR(creation_date), MONTH(creation_date)