のために、私は2つのテーブルを持っている...MySQLのクエリ日付パート
tblEvent
--------
id
date
tblEventRecurring
-----------------
event_id
date_part
end_date
関係は、私は1日(tblEventの日付)のいずれかであるか、間隔(日、週に再発するイベントを持つことができています、Month、Year)を使用して、tblEventRecurringテーブルを関連付けます。
たとえば、私は2月28日まで、繰り返し2月10日のイベントに置けば、私が持っていると思います...
tblEvent
--------
id = 1
date = 2012-02-10
tblEventRecurring
-----------------
event_id = 1
date_part = D
end_date = 2012-02-28
すべての日付を取得するには、クエリの最良の方法構造ものですtblEventRecurring.date_part = Dと今日< END_DATE
- tblEvent.date =今日
- 以下tblEventRecurring.date_part = Mと今日はなどtblEvent.dateと< END_DATE として月の同じ日の場合= Wと今日の一部はtblEvent.dateとして、週の同じ日(日-土)で、< END_DATE
他にも効率的なソリューションがありますか?これは、IFまたはCASEまたは複数のAND/ORステートメントを使用するための良いタイミングですか?
ありがとうございました。 D.
私は調査していないために投票していたので、最終的なクエリを投稿すると思っていました...私はいくつかのAND/ORと括弧で苦労していました。私は研究をして、これまで使ったことのないCASEについてもっと読んでいたので、誰かがそれを使って私の質問を導くことができたらいいと思った。
# where the current date is 2012-02-12
SELECT e.record_id, e.event_date,
DATE_FORMAT(e.event_time, '%l:%i %p') AS event_time,
e.category, pm.person_id, pm.status, pm.active
FROM tblEvent e
JOIN tblTABLE pmd ON pmd.record_id = e.reference_id
JOIN tblTABLE2 pm ON pm.record_id = pmd.t_id
LEFT OUTER JOIN tblEventRecurring er ON er.event_id = e.record_id
WHERE e.category = 'CAT'
AND pm.planet_id = 1 # id of person
AND pm.active = 1
AND pm.status = 'Read Only'
AND (
e.event_date = '2012-02-12' # the event is on current date
OR (
# recurring with no end date or end date in future
er.end_date = '0000-00-00' OR er.end_date >= '2012-02-12'
AND (
e.event_date <= '2012-02-12' # recurring starts today or in past
AND (# meets any of the following
(er.date_part = 'D')
OR (er.date_part = 'W' AND dayofweek('2012-02-12') = dayofweek(e.event_date))
OR (er.date_part = 'M' AND dayofmonth('2012-02-12') = dayofmonth(e.event_date))
OR (er.date_part = 'Y' AND (day('2012-02-12') = day(e.event_date) AND MONTH('2012-02-12') = MONTH(e.event_date)))
)
)
)
)
ORDER BY e.event_time
ええと、これらの条件のクエリを求めています。だから、私はそれを改善する方法を知らない。期待される結果がどうなるべきか教えてください。 E.G .:今日どのような出来事が起こるべきか知りたいですか? –
はい。申し訳ありません...現在の日付については、日付と日付の部分が一致するすべてのイベントを設定したいと考えています – Don
2番目の投票の理由は何ですか? – Don