MYSQL,DATETIME,事件,按月/年按SQL或输出分组?

问题描述

| 我有一个带有
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);
    ,        您可以使用
YEAR()
MONTH()
MONTHNAME()
函数,但我认为您不需要
GROUP BY
而是
ORDER BY
SELECT YEAR( Event.start_date )  AS event_year,MONTH( Event.start_date ) AS event_month,MONTHNAME( Event.start_date ) AS event_month_name,Event.id,Event.name,Event.start_date,Event.end_date
FROM my_events AS Event
WHERE Event.start_date >= \'2011-07-01\'
  AND Event.start_date < \'2013-01-01\'
ORDER BY Event.start_date ASC
当月份或年份从一行到另一行更改时,您可以在PHP代码中使用
event_year
event_month
来添加July,August ...和2011标签。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...