【问题标题】:Pull entries based on a datetime field and organize by month and year根据日期时间字段提取条目并按月和年组织
【发布时间】:2013-01-29 20:59:33
【问题描述】:

我有一个名为“任务”的表,其中包含一堆信息(分配给谁、创建日期、到期日期等)

“task_due_date”字段是一个普通的日期时间字段。我想以此来组织所有的任务;例如,如果您在 2013 年 3 月有 3 个任务,在 4 月有 4 个任务,我想将它们分成每个月的 div,以便它们可以折叠以便于阅读。

我想知道最好的解决方法是什么?我怎样才能让它永不过时?我知道我可以为每年手动编写 PHP 循环(如果月份为 1,则执行此操作,如果月份为 2 执行此操作等),但似乎必须有一种更有效的方法。

它还需要注意年份,因此 2013 年 1 月应该比 2014 年 1 月有所下降。

我梦想的解决方案是:

  • 2013 年 3 月:任务 1、任务 2
  • 2013 年 4 月:任务 1
  • 2013 年 5 月:任务 1、任务 2

这是我的任务表的 SQL:

CREATE TABLE IF NOT EXISTS `tasks` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`task_status` int(11) unsigned NOT NULL DEFAULT '1',
`task_creation_date` datetime NOT NULL,
`task_due_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`task_completed_date` datetime DEFAULT NULL,
`task_priority` bigint(20) unsigned NOT NULL,
`task_assignment` int(11) unsigned NOT NULL,
`task_description` longtext NOT NULL,
`task_type` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `task_type` (`task_type`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2698 ;

【问题讨论】:

    标签: php mysql sql group-by


    【解决方案1】:

    如果会有很多任务,您可以考虑生成“每月”的 div 并通过 AJAX 加载检索实际任务。

    您将能够通过使用查询对它们进行分组来显示每年/每月的任务数;

    SELECT 
       COUNT(*) AS number_of_tasks, 
       YEAR(task_due_date) AS task_year, 
       MONTH(task_due_date) AS task_month 
    FROM tasks 
    GROUP BY task_year, task_month;
    

    这样,创建 div,然后使用此查询检索(通过 AJAX)选定年/月内的所有任务

    SELECT *
    FROM tasks 
       WHERE YEAR(task_due_date) = 2013, 
       AND MONTH(task_due_date) = 1 
    

    【讨论】:

      【解决方案2】:

      您需要进行group by SQL 查询

      看看这个可能会有所帮助

      MySQL group by day with datetime mixing same dates from different months

      【讨论】:

        【解决方案3】:

        这将为您提供接近您的“梦想解决方案”,尽管我可能认为这有点过于字面:

        SELECT
          CONCAT(
            DATE_FORMAT( `task_due_date`, '%M %Y' ),
            ': ',
            GROUP_CONCAT( CONCAT( 'Task ', `ID` ) SEPARATOR ', ' )
          ) AS `tasks_per_month`
        FROM
          `tasks`
        GROUP BY
          DATE_FORMAT( `task_due_date`, '%M %Y' )
        ORDER BY
          `task_due_date`;
        

        【讨论】:

          猜你喜欢
          • 2016-07-27
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          • 2011-03-24
          • 1970-01-01
          • 2017-10-17
          • 2017-04-14
          • 1970-01-01
          相关资源
          最近更新 更多