Я бы сделал так
user_id, weekDays, date, startTime, interval, endTime, nextTime
SELECT * FROM `table`
WHERE `nextTime` < `endTime`
AND ((`weekDays` & (1 << WEEKDAY(NOW())) OR `date` = CURDATE())
AND `nextTime` < {$currentTime};
UPDATE `table`
SET `nextTime` = ADDTIME(`nextTime`, `interval`)
WHERE `nextTime` < `endTime`
AND `nextTime` < {$currentTime};
$currentTime нужна для того, чтобы не пропустить события между запросами SELECT и UPDATE.
В полночь сбрасывать nextTime
UPDATE `table`
SET `nextTime` = `startTime`