यहाँ कुछ ऐसा है जिसके साथ मैं खेल रहा हूँ (और यहाँ यह एक sqlfiddle
के रूप में है कुछ नमूना डेटा के साथ)... इसके बारे में 100% निश्चित नहीं है, लेकिन इसे पिछले 7 दिनों के डेटा को हथियाना चाहिए। ध्यान दें कि मैं MySQL DATETIME
का उपयोग कर रहा हूं बनाम पूर्णांक टाइमस्टैम्प, लेकिन आप इसे आसानी से परिवर्तित करने में सक्षम होना चाहिए (क्वेरी के परीक्षण के लिए स्ट्रिंग तिथियों का उपयोग करना बहुत आसान था)।
SELECT *
FROM
(SELECT
*,
CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', DAY(start)) AS monthly,
CONCAT(YEAR(NOW()), '-', MONTH(start), '-', DAY(start)) AS yearly
FROM events
) tmp
WHERE
(
(recurring = 'none')
OR (recurring = 'daily')
OR (recurring = 'weekly')
OR (
recurring = 'monthly'
AND (
(
monthly >= NOW()
AND monthly <= DATE_ADD(NOW(), INTERVAL 7 DAY)
)
OR (
DATE_ADD(monthly, INTERVAL 1 MONTH) >= NOW()
AND DATE_ADD(monthly, INTERVAL 1 MONTH) <= DATE_ADD(NOW(), INTERVAL 7 DAY)
)
)
)
OR (
recurring = 'yearly'
AND (
(
yearly >= NOW()
AND yearly <= DATE_ADD(NOW(), INTERVAL 7 DAY)
)
OR (
DATE_ADD(yearly, INTERVAL 1 YEAR) >= NOW()
AND DATE_ADD(yearly, INTERVAL 1 YEAR) <= DATE_ADD(NOW(), INTERVAL 7 DAY)
)
)
)
)
AND start <= NOW()
AND (
end IS NULL
OR end >= DATE_ADD(NOW(), INTERVAL 7 DAY)
)