php - 使用 PHP MySql 的高级新闻存档年/月

标签 php mysql

我在 MySQL 数据库中插入带有 timestamp 的新闻日期。现在我需要像这样对我的新闻进行高级存档:

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 函数MySQL 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。只需获取整个列表,然后按年和月分组到一个数组中。

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

关于php - 使用 PHP MySql 的高级新闻存档年/月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957249/

相关文章:

javascript - 如何将json数据插入到表中?

php - 没有观点的行动。需要一个模块?

php - 有没有办法将各种 MYSQL 查询与多个 WHERE 子句结合起来?

mysql - 无法修复表时如何修复 MySQL "Incorrect key file"错误?

php - 在 php5 中使用 https

php - 如何使用正则 exp 从段落中选择电话号码

javascript - 如何使用 Javascript 和 PHP header 重命名正在下载的文件?

php - 在 Eclipse 中运行 PHP Zend 测试

mysql - 通过 Django 连接到 Vagrant 中的数据库

php - 将其他表单发布字段添加到 mysql 插入脚本