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

PHP按年份分组循环展示MySQL查询结果的实现方案

按年份分组展示事件数据的实现方法

要实现按年份分组展示事件的需求,可以通过优化SQL查询和调整PHP代码逻辑两步完成,具体如下:

一、优化SQL查询

在查询语句中直接提取event_date的年份,避免后续PHP重复处理,同时保持按时间倒序排序:

SELECT 
    *,
    YEAR(a.event_date) AS event_year
FROM table a
INNER JOIN posts b ON a.event_id = b.ID
WHERE a.user_id = 14
ORDER BY a.event_date DESC

二、修改PHP代码实现分组展示

先将查询结果按年份归类到数组中,再分层循环输出年份标题和对应事件列表:

$results = $wpdb->get_results($query);

if ($results) {
    // 初始化分组数组,按年份存储对应事件
    $eventsByYear = [];
    foreach ($results as $row) {
        $eventYear = $row->event_year;
        $rawDate = $row->event_date;
        $newDate = date("d-m-Y", strtotime($rawDate));
        
        // 将当前事件数据存入对应年份的分组
        $eventsByYear[$eventYear][] = [
            'date' => $newDate,
            'link' => tribe_get_event_link($row->event_id),
            'title' => $row->post_title,
            'points' => $row->points
        ];
    }

    echo '<h3>Title</h3>';
    // 遍历分组数组,输出年份和对应事件列表
    foreach ($eventsByYear as $year => $events) {
        echo '<strong>' . $year . '</strong>';
        echo '<ul>';
        foreach ($events as $event) {
            echo '<li>' . $event['date'] . ': <a href="' . $event['link'] . '" target="_blank">' . $event['title'] . '</a> (' . $event['points'] . ' PE)</li>';
        }
        echo '</ul>';
    }
}

替代方案(不修改SQL)

如果不想调整SQL,也可以在PHP中直接从event_date提取年份,将上述代码中的$eventYear = $row->event_year;替换为:

$eventYear = date("Y", strtotime($row->event_date));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:22:57