我喜歡將這樣的問題可視化。據我理解你的問題,有四種類型的事件應該返回:
|-------------------- WEEK ---------------------|
| |
| |========== EVENT ==========| |
|========== EVENT ==========| |
| |========== EVENT ==========|
|========================= EVENT =========================|
| |
|-----------------------------------------------|
這意味着我們有:在一週的開始和結束
- 事件;
- 在本週前開始並在本週結束的事件;
- 一週內開始,一週後結束的事件;
- 在一週前開始並在一週後結束的事件。
這個翻譯成SQL提供了以下:
SELECT *
FROM events
WHERE (start_date >= CURDATE() AND end_date <= CURDATE() + INTERVAL 1 WEEK)
OR (start_date < CURDATE() AND end_date >= CURDATE())
OR (start_date <= CURDATE() + INTERVAL 1 WEEK
AND end_date > CURDATE() + INTERVAL 1 WEEK)
OR (start_date < CURDATE() AND end_date > CURDATE() + INTERVAL 1 WEEK);
我以前>=
和<=
的一個星期內的日期。通過這種方式,我們可以確保在一週的開始或結束時開始或結束的事件也包含在內。
假設start_date <= end_date
是所有行真,簡單的方法是:
SELECT *
FROM events
WHERE start_date <= CURDATE() + INTERVAL 1 WEEK
AND CURDATE() <= end_date
只是爲了澄清是否只想起始日期從今天今天,1周間下跌?還是它必須是start_date和end_date? – hkf 2012-04-23 23:30:46
嗨,喬納森,謝謝你的幫助,對於我在辦公室呆了幾天的延誤感到抱歉。今天我將通讀並嘗試您的解決方案,如果它能起作用,我會將其標記爲答案! – 2012-04-30 16:40:22
@hkf數據庫中的每個事件都有一個start_date值和一個end_date值。我正在查找一個查詢,它會給我提供符合NOW()和NOW()+ 1周之間任何時間的任何事件的每個事件的查詢在事件 – 2012-04-30 16:49:33