Циклы в MySQL или как по другому

ryr

Новичок
Циклы в MySQL или как по другому

Есть таблица данных вида:
PHP:
id |startDate |endDate
-------------------------
1  |2008-08-25|2008-08-31
2  |2008-08-28|2008-08-28
3  |2008-07-27|2009-05-30
4  |2008-08-25|2008-08-27
5  |2008-04-26|2008-09-28
6  |2008-05-29|2008-06-30
7  |2007-06-25|2008-11-25
8  |2008-08-30|2009-08-30
Нужно находить count(id) за определенный день. Но нужно искать не по дням, а за определенный отрезок даты и выдавать по дням. Что-то по типу этого:
PHP:
SELECT COUNT(id) FROM table WHERE '2008-08-27' BETWEEN startDate AND endDate
Данный вариант не подходит ввиду того, что он проверяет только 1 день, а не отрезок.
Собственно вопрос, есть ли какой способ перебором от одной даты до другой пройтись по запросу, либо еще каким-либо способом, чтобы получить список дней и count за этот день.

P.S. вариант с UNION не подходит т.к. отрезок может быть длиной в десятки лет
P.P.S mysql 5+ версии
 

ryr

Новичок
zerkms
создать таблицу чего? если конкретных дат, тогда как их туда добавлять имея только начальную и конечную даты
 

zerkms

TDD infected
Команда форума
как их туда добавлять имея только начальную и конечную даты
1. циклом в любом из известных языков программирования?
2. создать таблицу с числами от 0 до 9 и INNER JOIN её нужное число раз саму с собой, прибавляя начальную дату?
 

ryr

Новичок
1. циклом в любом из известных языков программирования?
2. создать таблицу с числами от 0 до 9 и INNER JOIN её нужное число раз саму с собой, прибавляя начальную дату?
Оба варианта подразумевают использование языков программирования. При этом длина запроса может получиться слишком длинной либо большое кол-во запросов к базе, а значит не подходит в случае, когда отрезок стремится к бесконечности.
 

zerkms

TDD infected
Команда форума
ryr
при первом варианте длина запроса вообще не зависит от интервала

собственно - не устраивают эти, предложи альтернативный? :)

ps: SP?
 

4m@t!c

Александр
А чем не устраивает SP или перебор на клиенте? Если так критично, то пару вариантов.
Или я что-то не понимаю или почему не устраивает GROUP BY? Вариант, нужно отображать нулевое количество для дней, по которым вообще не было записей. Тогда сделать таблицу с датой по-порядку и просто LEFT JOIN и GROUP BY
 

ryr

Новичок
при первом варианте длина запроса вообще не зависит от интервала
зато mysql загрузится инсертами каждого дня из промежутка в базу.
собственно - не устраивают эти, предложи альтернативный? :)
алтернатива - взять из базы варинты, удовлетворяющие отрезку, и их уже обработать с помощью PHP
что имелось ввиду?
 

zerkms

TDD infected
Команда форума
зато mysql загрузится инсертами каждого дня из промежутка в базу.
одним запросом можно вставить >1 записи

алтернатива - взять из базы варинты, удовлетворяющие отрезку, и их уже обработать с помощью PHP
отличная альтернатива :)))) при том что ты изначально в принципе отметал па с помощью языков программирования

что имелось ввиду?
stored procedures
 

ryr

Новичок
Вообще, я хотел получить универсальный вариант для лубого промежутка дат, в котором были бы постоянными длина запроса и колличество обращений к базе, а так же без создания каких-либо процедур.
В других SQL видел оператор WITH, который идеально подошел бы в моем случае, но его нет в MySQL.

-~{}~ 09.09.08 15:16:

одним запросом можно вставить >1 записи
длина запроса при вставке дней от 1 января 1970 года по 1 января 2030 года...

отличная альтернатива :)))) при том что ты изначально в принципе отметал па с помощью языков программирования
я их не отметал. я говорил, что те случаи не подходят ввиду неопределенной длины запроса.
 

zerkms

TDD infected
Команда форума
длина запроса при вставке дней от 1 января 1970 года по 1 января 2030 года...
вставить во временную таблицу 10 записей, потом объединить таблицу саму с собой 6 раз :) результат перемножения прибавлять к 1970-01-01 %)
 
Сверху