Автор оригинала: Wicked
Таблица-итератор.
Нигде ничего подобного не видел, так что считаю это своим изобретением.
Объясню на более простом примере.
Допустим, у нас есть таблица с интервалами дат `range`.
id | date_start | date_end
1 | 2006-01-01 | 2006-01-19 (длина 19 дней)
2 | 2006-01-06 | 2006-01-20 (длина 15 дней)
А нам из нее надо получить все 19+15 промежуточных дат. Тогда мы создаем таблицу-итератор `iterator` с единственным полем `i` типа int. И заполняем ее 19-ю (max(15, 19) в данном случае) значениями от 0 до 18.
Тогда чтобы сгененировать интересующие нас даты, делаем следующий запрос:
[sql]SELECT
range.id, range.date_start + INTERVAL iterator.i DAY as `date`
FROM
range
INNER JOIN iterator ON (range.date_start + INTERVAL iterator.i DAY <= range.date_end)
order by id, `date`[/sql]
"И вуаля" © я.
id | `date`
1 | 2006-01-01
1 | 2006-01-02
...
1 | 2006-01-18
1 | 2006-01-19
2 | 2006-01-06
2 | 2006-01-07
...
2 | 2006-01-19
2 | 2006-01-20