You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP和SQL按月份分组数据、遍历月内日期并切换月份

PHP+SQL按月份分组输出数据的实现方案

你的核心问题是当前循环会为每一条数据生成独立的.month容器,导致同一月份的内容被拆分,需要调整逻辑将同一月份的所有条目合并到同一个容器内。以下是修改后的实现代码:

修改后的完整代码

<?php
$query = '
    SELECT
    Creation_date,
    DATE_FORMAT(Creation_date, "%m") Creation_date_m,
    DATE_FORMAT(Creation_date, "%M") Creation_date_M_full,
    DATE_FORMAT(Creation_date, "%Y") Creation_date_Y_full,
    Project_name
    FROM Projects
    ORDER BY Creation_date DESC
';
$result = $conn->query($query);

$previousMonthYear = null; // 用年月组合做判断,避免同月份不同年份的冲突
?>

<?php while ($row = $result->fetch_assoc()): ?>
    <?php
    $month = $row['Creation_date_m'];
    $monthFull = $row['Creation_date_M_full'];
    $year = $row['Creation_date_Y_full'];
    $currentMonthYear = $year . '-' . $month; // 生成唯一的年月标识

    // 当月份/年份变化时,闭合上一个容器并开启新容器
    if ($currentMonthYear !== $previousMonthYear) {
        // 如果不是第一条数据,先关闭上一个.month容器
        if ($previousMonthYear !== null) {
            echo '</div>';
        }
        // 输出新的月份容器开头和标题
        echo '<div class="month">';
        echo '<h2>' . $monthFull . ' ' . $year . '</h2>';
        $previousMonthYear = $currentMonthYear;
    }
    ?>

    <div class="day-of-month"><?= $row['Creation_date']; ?></div>
<?php endwhile; ?>
<?php
// 循环结束后,闭合最后一个.month容器
if ($previousMonthYear !== null) {
    echo '</div>';
}
?>

关键逻辑说明

  1. 年月组合判断:用年份-月份的字符串作为唯一标识,避免出现同月份不同年份(如2022年2月和2023年2月)被错误合并的情况。
  2. 容器的开启与闭合:
    • 首次循环或年月变化时,先关闭上一个容器(如果存在),再开启新的.month容器并输出月份标题。
    • 同一年月的条目直接输出.day-of-month内容,无需重复生成容器。
  3. 循环收尾:循环结束后必须手动闭合最后一个.month容器,避免HTML结构不完整。

输出效果

修改后将生成你期望的结构:

<div class="month">
  <h2>February 2023</h2>
  <div class="day-of-month">2023-02-24</div>
  <div class="day-of-month">2023-02-22</div>
  <div class="day-of-month">2023-02-22</div>
</div>

<div class="month">
  <h2>January 2023</h2>
  <div class="day-of-month">2023-01-28</div>
  <div class="day-of-month">2023-01-20</div>
</div>

内容的提问来源于stack exchange,提问作者Tony Chheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:45:07