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
相关产品推荐
相关产品推荐

