2015-07-21 3 views
2

Пожалуйста, посмотрите на мой books таблице:Как получить все даты между двумя датами?

books

+-----+----------+------------+------------+ 
| id | venue_id | from_date | to_date | 
+-----+----------+------------+------------+ 
| 1 | 8  | 2015-07-21 | 2015-07-28 | 
| 2 | 5  | 2015-08-03 | 2015-08-25 | 
+-----+----------+------------+------------+ 

Я хочу, чтобы просмотреть все даты между from_date и to_date, для которых venue_id = 8

Мой вывод должен быть:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [venue_id] => 8 
      [today] => 2015-07-21 
     ) 
    [1] => Array 
     (
      [id] => 1 
      [venue_id] => 8 
      [today] => 2015-07-22 
     ) 
    [2] => Array 
     (
      [id] => 1 
      [venue_id] => 8 
      [today] => 2015-07-23 
     ) 
    [3] => Array 
     (
      [id] => 1 
      [venue_id] => 8 
      [today] => 2015-07-24 
     ) 
    [4] => Array 
     (
      [id] => 1 
      [venue_id] => 8 
      [today] => 2015-07-25 
     ) 
    [5] => Array 
     (
      [id] => 1 
      [venue_id] => 8 
      [today] => 2015-07-26 
     ) 
    [6] => Array 
     (
      [id] => 1 
      [venue_id] => 8 
      [today] => 2015-07-27 
     ) 
) 

today рассчитывается с from_date Дата до to_date дата. Но мой разум пуст об этом запросе. Как написать MySQL-запрос для получения вывода, как показано выше?

+0

Ваш выход опускает конечную дату - это правильно? Таким образом, данные не должны отображаться, если дата начала и дата окончания совпадают? Или вы гарантируете, что конечная дата всегда более поздняя, ​​чем дата начала? Открыты ли вы для создания дат списка таблиц? Тогда становится легко. В противном случае это непросто. –

ответ

0

Следующий запрос должен использоваться для получения желаемого результата. выберите * из книг whereplace_id = 8 и from_date> = '2015-07-21' и to_date < = '2015-07-27'

+0

Как это сделать запись на 2015-07-23? –

+0

вы можете сообщить мне, что будет логикой для вычисления сегодня из from_date и to_date –

+0

У меня нет лучшего решения, чем таблица, содержащая одну строку для каждой даты в диапазоне, который имеет отношение к приложению. Это не очень большой стол, даже если ваши данные восходят к римским временам и продвигаются к концу 10-го тысячелетия (менее 5 миллионов строк, скорее всего, намного меньше 500 000 строк). –

2

Я думаю, что приведенный ниже запрос должен отображать результаты. Хотя я не тестировал запрос.

select b.id,b.venue_id,d.date from books b 
join 
(select a.Date, "8" as venue_id2 
from (
select curdate() - INTERVAL (a.a + (10 * b.a) + (1000 * c.a)) DAY as Date 
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a 
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b 
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c 
) a 
where a.Date between '2010-01-20' and '2010-01-24') d on d.venue_id2 = b.venue_id and b.venue_id = 8 
+0

Часть ответа из этого сообщения http://stackoverflow.com/questions/2157282/generate-days-from-date-range. На всякий случай вам нужно. –

+0

Я получаю эту ошибку '# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «join select a.Date as today from» (выберите curdate() - INTERVAL (aa + (10 * b »в строке 2' – Chinmay235

+0

Прошу прощения. Я исправил запрос сейчас. –

Смежные вопросы