MYSQL、DATETIME、事件、在 SQL 中或在输出中按月/年分组?

标签 mysql arrays cakephp merge multidimensional-array

我有一个带有 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/

相关文章:

MySQL MyISAM 全文搜索 - 如何添加 '#' 作为 utf8 字符集的单词字符?

mysql - INNER JOIN 从表 2 中选择列

mysql - 更新查询不起作用

javascript - 删除键后调整对象键

基于键范围的 PHP SPLIT 数组

php - Cakephp 3 在 frozentime 对象中给出日期和时间字段

慢查询的MYSQL查询优化

c# - 是否可以在 C# 中扩展数组?

php - Cakephp 如何基于另一个虚拟字段创建虚拟字段

postgresql - 修改cakephp中的Routes.php文件