我有兩個表...MySQL查詢的日期部分
tblEvent
--------
id
date
tblEventRecurring
-----------------
event_id
date_part
end_date
的關係,我可以有一個事件要麼是在第一天(在tblEvent日期)或復發的時間間隔(日,周,Month,Year),它們綁定在tblEventRecurring表中。
例如,如果我把一個事件爲2月10日,直到反覆2月28日我有...
tblEvent
--------
id = 1
date = 2012-02-10
tblEventRecurring
-----------------
event_id = 1
date_part = D
end_date = 2012-02-28
什麼是最好的方式結構的查詢來獲取所有日期的地方滿足以下條件......
- tblEvent.date =今日事今日
- 如果tblEventRecurring.date_part = d和< END_DATE
- 如果tblEventRecurring.date_部分= W,今天是星期的同一天(週日至週六)爲tblEvent.date和< END_DATE
- 如果tblEventRecurring.date_part = M,今天是本月的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 .:你想知道今天應該發生什麼事件嗎? – 2012-02-10 18:47:48
是的。對不起...對於當前日期,我希望爲該日期設置所有事件,以及與date_part匹配的任何重複事件 – Don 2012-02-10 20:19:28
第二次投票的任何解釋? – Don 2013-01-02 20:37:48