午前 9 時以前の投稿の質問については助けてもらいましたが、新しい質問があります。私の説明で我慢してください....
セットアップ、2 つのテーブル:cal_events
カレンダーの動的イベントと、1 日の更新が行われる繰り返しイベントを保持します。また、cal_events_recurring
定期的なイベントを開催します。以下のクエリは、PHP によって渡されるダミー データを使用した例です。12 月 15 日に基づいているので、その日のすべてのイベントを返します。重要な部分は、一致する動的な対応がない場合にのみ繰り返しイベントが返されることです。cal_events
, is_overwrite
= 1 とそのoverwrite_id
= (午前 9 時のイベントの一意の ID) の場合cal_events_recurring
、動的テーブル行のみが返されます。これは、「ねえ、私は毎日午前 9 時に発生するイベントです (例)、しかし、ほら、12 月 15 日に、その日の 9:00 の定期的なイベントが、動的テーブルに基づいて更新されたoverwrite_id
ので、そのテーブルに私の一意の ID = を返します。」
select * from(
select
ifnull(ce.time, cer.time) as time,
ifnull(ce.title, cer.title) as title,
ce.is_overwrite
from cal_events_recurring cer
left join cal_events ce on ce.overwrite_id = cer.id
where cer.is_daily = 1
or cer.day_index = 6
or cer.day_num = 15
union
select time as time, title, is_overwrite
from cal_events where date = '2012-12-15'
and is_active = 1 and is_overwrite = 0) as e order by time asc
これで問題ありません。データは正しく、問題はis_active
フィールドです。再び午前 9 時の例から離れます。16 日の定期的なイベントを上書きする 16 日の午前 9 時の動的イベントを作成しました。後で通常の定期的なイベントに戻すことにした場合is_active
は、一致する動的イベントのフィールドを 0 に設定します。問題は、動的イベントがまだ返されることです。追加and ce.is_active = 0
しても、イベントは返されます。対応する動的イベントがアクティブでない場合でも繰り返しイベントを返すようにするには、どのように記述すればよいでしょうか?
他に必要な情報があれば教えてください!
EDIT* 出力:
time title
08:00:00 recurring everyday 8am
09:00:00 dynamic 9am update
(9am should be the recurring event because the dynamic is_active = 0)