私は交通計画担当者に取り組んでいます。私のMySQL(i)/ PHPの知識は(非常に)基本的です。
特定の日のすべてのタスクを含むHTMLテーブルを表示したい。ただし、問題は、一部のタスクを(タスク全体を削除するまで)繰り返す必要があるため、タスクの頻度が1回、毎日、毎週、2週間、毎月のようになることです。
もちろん、毎週月曜日に新しいタスクを追加する場合、そのタスクは毎週月曜日にテーブルに戻される必要があります。
次のようなものを組み合わせる必要があります:
SELECT * FROM planner
WHERE frequency = `once`
AND date = CURDATE()
SELECT * FROM planner
WHERE frequency = `daily/weekly/two-weekly/monthly/yearly`
AND day = DAYOFWEEK(CURDATE())
AND date + INTERVAL 1 DAY/1 WEEK/2 WEEK/1 MONTH
もしそうなら、どうやって?
誰かが私を助けてくれることを願っています。
編集:
1回、毎日および毎週のタスクの場合、このようなクエリ(おそらくまだ恐ろしい)は次のようになります。
(SELECT *
FROM planner
WHERE frequency = 'once'
AND date = NOW())
UNION
(SELECT *
FROM planner
WHERE frequency = 'daily'
AND date + INTERVAL 1 DAY)
UNION
(SELECT *
FROM planner
WHERE frequency = 'weekly'
AND day = DAYOFWEEK(CURDATE())
AND date + INTERVAL 1 WEEK)
ただし、「2週間」および「毎月」の間隔+2週間/1か月の場合、毎週結果が返されます。これを修正する方法は?
編集:
期限切れ/無効な過去のタスクを認識していなかったため、テーブルで有効性列を使用しません。ラップトップの年を2040に変更しましたが、実際にmysqlエラーが発生しました。計画を変更しましたが、繰り返しのタスクは1年間有効で、削除するか、もう1年間延長するかを選択できる方がよいと思います。また、月曜日に月曜日の頻度でタスクを作成すると、そのタスクが翌月の最初の月曜日にテーブルに返されることも忘れました。また、「1回」の頻度のタスクは、ソリューションを試すときに毎日テーブルに表示されます。
編集
@SparKot、通常は月ごとの頻度でタスクが表示されます。たとえば、2013-03-05で、次回は2013-04-05、2013-05-05などになります。このプランナーでは、例として月次タスクが設定されていますが、火曜日2013-03-05は、翌月の最初の火曜日に再表示されます(4月:2013-04-02、5月:2013-05-07、6月:2013-06- 04)。