0

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

“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 ;
4

3 回答 3

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 
于 2013-01-29T21:29:40.870 回答
0

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

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`;
于 2013-01-29T21:49:47.900 回答
0

您需要进行group bySQL 查询

看到这个可能会有所帮助

MySQL按天分组,日期时间混合来自不同月份的相同日期

于 2013-01-29T21:21:12.843 回答