我有一个带有 start_date
字段的事件表,这是一个标准日期时间。我希望选择表中的所有事件,然后将它们分组输出,按事件分别的月份和年份分隔。
我正在使用这个查询:
SELECT Event.id, Event.name, Event.start_date, Event.end_date,
EXTRACT(MONTH FROM `Event`.`start_date`) AS `event_month`,
EXTRACT(YEAR FROM `Event`.`start_date`) AS `event_year`
FROM `my_events` AS `Event`
生成以下 $events
数组:(使用 CakePHP)
Array
(
[0] => Array
(
[Event] => Array
(
[id] => 1
[name] => Event Name One
[start_date] => 2011-07-03 11:00:00
[end_date] => 2011-07-03 16:00:00
)
[0] => Array
(
[event_month] => 7 // This event occurs in July
[event_year] => 2011
)
)
[1] => Array
(
[Event] => Array
(
[id] => 2
[name] => Event Name Two
[start_date] => 2011-07-09 11:00:00
[end_date] => 2011-07-09 15:00:00
)
[0] => Array
(
[event_month] => 7 // this event occurs in July
[event_year] => 2011
)
)
[2] => Array
(
[Event] => Array
(
[id] => 3
[name] => Event Name Three
[start_date] => 2011-07-09 11:00:00
[end_date] => 2011-07-09 15:00:00
)
[0] => Array
(
[event_month] => 8 // this event occurs in august.
[event_year] => 2011
)
)
我希望现在循环遍历这些数组,并产生如下输出:
七月
- 事件名称一
- 事件名称二
八月
- 事件名称三
我选择使用 EXTRACT
SQL 函数,因为它似乎是为此目的抓取数据的一种常见方法。
我认为 array_merge
可能是一个选项,但 $result = array_merge($event)
似乎没有做任何事情。
我的路线是否正确,或者是否有更好的方法来实现这一目标?
谢谢。
最佳答案
使用分组依据:
select month( event.start_date), year( event.start_date), group_concat( distinct event.name ) from my_events event group by year(event.start_date), month(event.start_date);
关于MYSQL、DATETIME、事件、在 SQL 中或在输出中按月/年分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474824/