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

  • Автор темы Автор темы ryr
  • Дата начала Дата начала

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+ версии
 
zerkms
создать таблицу чего? если конкретных дат, тогда как их туда добавлять имея только начальную и конечную даты
 
как их туда добавлять имея только начальную и конечную даты
1. циклом в любом из известных языков программирования?
2. создать таблицу с числами от 0 до 9 и INNER JOIN её нужное число раз саму с собой, прибавляя начальную дату?
 
1. циклом в любом из известных языков программирования?
2. создать таблицу с числами от 0 до 9 и INNER JOIN её нужное число раз саму с собой, прибавляя начальную дату?
Оба варианта подразумевают использование языков программирования. При этом длина запроса может получиться слишком длинной либо большое кол-во запросов к базе, а значит не подходит в случае, когда отрезок стремится к бесконечности.
 
ryr
при первом варианте длина запроса вообще не зависит от интервала

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

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

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

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

-~{}~ 09.09.08 15:16:

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

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