私はトランスポート プランナーに取り組んでおり、選択した日付までにタスクを表示するために、次の mysql クエリを使用しています。
SELECT *
FROM planner
WHERE '$date' >= date
AND '$date' <= valid_till
AND (frequency = 'daily'
OR (frequency = 'once' AND date('$date') = date)
OR (frequency = 'weekly' AND 0 = (abs(datediff('$date', date)) % 7))
OR (frequency = 'two-weekly' AND 0 = (abs(datediff('$date', date)) % 14))
OR (frequency = 'monthly'
AND ceil(dayofmonth('$date')/7) = ceil(dayofmonth(date)/7)
AND dayofweek('$date') = dayofweek(date)))
AND dayofweek('$date') <> '1'
AND dayofweek('$date') <> '7'
例として、月曜日、水曜日、木曜日にのみ表示する必要があるタスクがいくつかあります。プランナーテーブルに新しい列を作成すると思いました: only_on_days (varchar) のように入力します: '2, 4, 5' 2 は月曜日、4 は水曜日、5 は木曜日を表します。
この機能を追加するためにクエリを変更するのを手伝ってくれる人はいますか? それとも、もっと良いアイデアがあるのでしょうか?
編集
次のような新しいテーブルを作成しました: planner_days (例):
id --- planner_id --- day
1 12 2
2 12 3
3 12 4
4 12 5
5 12 6
6 13 3
7 13 5
@eugen-rieckと言ったように、結合クエリを作成しようとしました。
SELECT planner.*, planner_days.*
FROM planner
LEFT JOIN planner_days
ON planner.planner_id = planner_days.planner_id
WHERE '$date' >= date
AND '$date' <= valid_till
AND (frequency = 'daily' AND dayofweek('$date') = planner_days.day
OR (frequency = 'once' AND date('$date') = date)
OR (frequency = 'weekly' AND 0 = (abs(datediff('$date', date)) % 7))
OR (frequency = 'two-weekly' AND 0 = (abs(datediff('$date', date)) % 14))
OR (frequency = 'monthly'
AND ceil(dayofmonth('$date')/7) = ceil(dayofmonth(date)/7)
AND dayofweek('$date') = dayofweek(date)))
AND dayofweek('$date') <> '1'
AND dayofweek('$date') <> '7'
これは機能しますが、毎日表示する必要があるタスクが複数回表示されるようになりました.誰かがこれに対する解決策を持っていますか?