यह अनिवार्य रूप से मोस्टी के उत्तर जैसा ही है लेकिन केवल एक बार होने वाली घटनाओं को पुनर्प्राप्त करने के लिए बाएं जॉइन के साथ। यह आज के सभी ईवेंट पुनर्प्राप्त करेगा।
SELECT *
FROM `tblEvent`
LEFT JOIN `tblEventRecurring`
ON `tblEvent`.`id` = `tblEventRecurring`.`event_id`
WHERE (`tblEvent`.`date` = CURRENT_DATE AND `tblEventRecurring`.`event_id` IS NULL)
OR (
CURRENT_DATE BETWEEN `tblEvent`.`date` AND `tblEventRecurring`.`end_date`
AND (
(`tblEventRecurring`.`date_part` = 'D') OR
(`tblEventRecurring`.`date_part` = 'W' AND DAYOFWEEK(`tblEvent`.`date`) = DAYOFWEEK(CURRENT_DATE)) OR
(`tblEventRecurring`.`date_part` = 'M' AND DAYOFMONTH(`tblEvent`.`date`) = DAYOFMONTH(CURRENT_DATE))
)
)
मुझे यकीन नहीं है कि यह आपके किसी काम का है या नहीं, लेकिन मैंने सोचा कि मैं इसे वैसे ही पोस्ट कर दूंगा जैसा मैंने अभी किया है
SELECT *
FROM `date_list`
LEFT JOIN (
SELECT `tblEvent`.`id`, `tblEvent`.`date`, `tblEvent`.`name`, `tblEventRecurring`.`date_part`, `tblEventRecurring`.`end_date`
FROM `tblEvent`
LEFT JOIN `tblEventRecurring`
ON `tblEvent`.`id` = `tblEventRecurring`.`event_id`
) AS `events`
ON (
`events`.`date` = `date_list`.`date`
)
OR (
`date_list`.`date` BETWEEN `events`.`date` AND `events`.`end_date`
AND (
(`events`.`date_part` = 'D') OR
(`events`.`date_part` = 'W' AND DAYOFWEEK(`events`.`date`) = DAYOFWEEK(`date_list`.`date`)) OR
(`events`.`date_part` = 'M' AND DAYOFMONTH(`events`.`date`) = DAYOFMONTH(`date_list`.`date`))
)
)
WHERE `date_list`.`date` BETWEEN '2012-02-06' AND '2012-02-12'
ORDER BY `date_list`.`date`;
यह एक date_list
मानता है एक date
. से युक्त तालिका दिनांकों की एक सतत सूची युक्त फ़ील्ड।