0

たくさんの情報(誰に割り当てられているか、作成された日付、期限など)を含む「tasks」という名前のテーブルがあります。

'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ロードを介して実際のタスクを取得することを検討してください。

クエリでグループ化することにより、1年/月あたりのタスク数を表示できます。

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

group bySQLクエリを作成する必要があります

これを参照してくださいそれは役立つかもしれません

MySQLを日ごとにグループ化し、日時が異なる月の同じ日付を混合している

于 2013-01-29T21:21:12.843 に答える
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 に答える