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

Posted

技术标签:

【中文标题】使用 PHP MySql 的高级新闻存档年/月【英文标题】:Advanced news archive Years/Month using PHP MySql 【发布时间】:2014-01-06 19:00:14 【问题描述】:

我在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 functionMySQL SELECT 结构来使用 PDO 或 MySQL Query 打印。

在线示例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>';
 

但是,此打印仅按年广告月计算和分组。我需要在每个月之后列出文章。

【问题讨论】:

我也需要很多!但是你做了什么来解决你的问题? 我们需要您的代码 Alex.DX,除非您希望我们从头开始编写代码,而这不会发生。 @Sergio 和 JakeGloud 我在编辑中添加了简单的代码。 【参考方案1】:

如果您还需要单个文章的名称,则不能使用 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>

【讨论】:

【参考方案2】:

您将要为此使用 MySQL:

ORDER BY DATE(actionTime)

只需按日期对结果进行排序,而不是对它们进行分组,然后将 count(*) 替换为 *。

【讨论】:

【参考方案3】:

试试看:

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

【讨论】:

以上是关于使用 PHP MySql 的高级新闻存档年/月的主要内容,如果未能解决你的问题,请参考以下文章

嵌套的年/月/帖子标题存档

WordPress 博客,仅对当前页面使用存档?

带有年、月、日、帖子和评论计数的 Wordpress 存档列表

显示月存档链接中特定类别的帖子?

基于学年的 PHP 和 MySQL 存档

自 2020 年 5 月 20 日存档以来,安装 RQDA 软件包时出现问题