使用PHP MySql的高级新闻档案年/月

时间:2014-01-06 19:00:15

标签: php mysql

我在timestamp数据库中插入了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 Years ad Month。我需要在每个月之后列出文章。

3 个答案:

答案 0 :(得分:3)

如果您还想要各个文章的名称,则无法使用GROUP BY。只需获取整个列表,然后按年和月分组。

$sql = "SELECT timestamp, your_id_column, your_title_column FROM `NEWS` ORDER BY timestamp DESC";

$newsdata = DataAccess::ArrayFetch($sql);

$nav = array();

foreach ( $newsdata as $news ) {
    $year = date('Y', $news['timestamp']);
    $month = date('F', $news['timestamp']);
    $nav[$year][$month][$news['your_id_column']] = $news['your_title_column'];
}

当您迭代结果数组时,您可以计算每年/每月的新闻项目以生成总数。

<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>

答案 1 :(得分:0)

你会想要使用MySQL:

ORDER BY DATE(actionTime)

只需按日期排序结果,而不是将它们分组,并将您的计数(*)替换为*。

答案 2 :(得分:0)

试一试:

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