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

如何将PHP+MySQL查询结果按日期分组并分页展示?

实现按日期分组展示用户数据的修改方案

嘿,我来帮你搞定按日期分组展示用户数据的需求!咱们一步步调整你的PHP代码,同时保留分页功能:

核心思路

要实现按日期分组,关键是先按日期排序(你原代码已经做了ORDER BY date DESC,这点很棒),然后在循环输出时,判断当前行的日期是否和上一行一致——如果不一致,就输出新的日期标题,再展示该行数据。另外要注意:如果你的date字段包含时间(比如YYYY-MM-DD HH:MM:SS),得先提取纯日期部分,避免同一日期但不同时间的记录被当成不同分组。

修改后的完整代码

<?php
// 数据库连接
$con = mysqli_connect("localhost","root","","sample") or die(mysqli_connect_error());

// 分页配置
$result_per_page = 10;
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1; // 获取当前页码,默认第1页
$offset = ($current_page - 1) * $result_per_page; // 计算分页偏移量

// 查询总条数(用于计算总页数)
$calculation_data_query = "SELECT COUNT(*) AS total FROM `users`";
$run_calculation = mysqli_query($con, $calculation_data_query);
$total_rows = mysqli_fetch_assoc($run_calculation)['total'];
$number_of_pages = ceil($total_rows / $result_per_page);

// 查询当前页数据,同时提取纯日期字段
$table_data_query = mysqli_query($con, "SELECT *, DATE(date) AS formatted_date FROM `users` ORDER BY date DESC LIMIT $offset, $result_per_page");

// 初始化变量存储上一个日期
$previous_date = '';
?>

<!-- 输出分组数据 -->
<?php while($row_value = mysqli_fetch_array($table_data_query)): ?>
    <?php
    $current_date = $row_value['formatted_date'];
    // 如果当前日期和上一个不同,输出日期标题
    if($current_date !== $previous_date):
        // 格式化日期为你要的DD/MM/YYYY格式
        $display_date = date("d/m/Y", strtotime($current_date));
    ?>
        <h3><?php echo $display_date; ?></h3>
        <table>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
                <th>Phone</th>
            </tr>
    <?php
        $previous_date = $current_date;
    endif;
    ?>
            <tr>
                <td><?php echo $row_value['id']; ?></td>
                <td><?php echo $row_value['name']; ?></td>
                <td><?php echo $row_value['email']; ?></td>
                <td><?php echo $row_value['phone']; ?></td>
            </tr>
<?php endwhile; ?>
</table>

<!-- 分页导航(可选,完善分页功能) -->
<div class="pagination">
    <?php for($i=1; $i<=$number_of_pages; $i++): ?>
        <a href="?page=<?php echo $i; ?>" <?php echo $i == $current_page ? 'class="active"' : ''; ?>><?php echo $i; ?></a>
    <?php endfor; ?>
</div>

<?php mysqli_close($con); ?>

关键改动说明

  • 日期格式化处理:用DATE(date) AS formatted_date提取纯日期,避免时间部分干扰分组;再用date("d/m/Y", strtotime($current_date))转换成你需要的DD/MM/YYYY格式。
  • 分组判断逻辑:新增$previous_date变量,每次循环对比当前日期和上一个日期,不同时就输出日期标题和表格表头。
  • 完善分页逻辑:把原来固定的LIMIT 0,10改成动态偏移量,支持多页切换;同时优化总条数查询,用COUNT(*)比查所有数据更高效。
  • 代码结构优化:用while(:)和endwhile的语法让HTML和PHP混合代码更易读,同时新增了表头和分页导航(如果不需要可以删掉分页部分)。

注意哦:如果你的date字段已经是纯日期类型(比如YYYY-MM-DD),可以去掉DATE(date)这一步,直接用原字段就行。

内容的提问来源于stack exchange,提问作者Wilson Ellis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:43:12