我有一个名为'tasks'的表,其中包含一堆信息(分配给谁,创建日期,到期日期等)
'task_due_date'字段是普通的日期时间字段。我想通过这个组织所有的任务;例如,如果您在2013年3月和4月份有4个任务,我想将它们分成每个月的div,以便它们可以折叠以便于阅读。
我想知道最好的方法是什么?我怎样才能让它面向未来?我知道我可以手动编写每年的PHP循环(如果月份是1,这样做,如果月份是2这样做,等等),但似乎必须有一个更有效的方式。
它需要了解多年,所以2013年1月应该比2014年1月有所下降。
我的梦想解决方案是:
以下是我的任务表的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 ;
答案 0 :(得分: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
答案 1 :(得分:0)
您需要进行group by
SQL查询
看到这可能会有所帮助
MySQL group by day with datetime mixing same dates from different months
答案 2 :(得分: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`;