Сгенерировать ежемесячный XML из таблицы, содержащей диапазон дат

У меня есть таблица как -

test_table(booking_id, booking_description, start_date, end_date)

Пример данных -

1 | Some booking | 06/30/2013 | 08/01/2013
2 | Some new one | 08/05/2013 | 09/01/2013
3 | Some new two | 09/03/2013 | 09/05/2013

Теперь я хочу сгенерировать ежемесячный xml-файл с использованием некоторого java-кода (я бы написал, что в этом нет проблем), я бы передал месяц и год (в основном, дату начала и окончания месяца) в запрос mysql, и мне нужно немного таблица как -

month = 7, год 2013

1 | Some booking | 07/01/2013
1 | Some booking | 07/02/2013
...

Месяц = ​​9, год = 2013

2 | Some new one | 09/01/2013
  |              | 09/02/2013
3 | Some new two | 09/03/2013
...

Я хотел использовать цикл java от даты начала до даты окончания и запросить mysql, чтобы узнать, входит ли эта дата в диапазон дат или нет, если это произойдет, я бы добавил детали, иначе я бы добавил пробелы. Но это будет ужасный подход (будет 30 раз поисков mysql), и я рассматриваю его как последний вариант.

Есть ли другой способ с одним или двумя запросами mysql и получить данные в формате.

РЕДАКТИРОВАТЬ:

month = 7, year = 2013

Select * 
from booking_details 
where  month(start_date) <= 7 and year(start_date) <= 2013 and 
month(end_date) >= 7 and year(end_date) >= 2013

Я разработал этот запрос, но до сих пор не уверен, будет ли он реализован во всех возможных сценариях.


person codeomnitrix    schedule 10.07.2013    source источник
comment
какой столбец вы хотите сравнить с месяцем / годом, который вы проходите, start_date или end_date, или обоими?   -  person BlackICE    schedule 10.07.2013
comment
данные должны быть получены только в том случае, если дата находится между некоторым диапазоном дат в таблице, иначе данные для даты не будут выбраны.   -  person codeomnitrix    schedule 10.07.2013
comment
вы хотите сравнить 2 диапазона дат? Итак, если вы пройдете в 7/2013, вы хотите увидеть, где дата начала или дата окончания - между 01.07.2013 и 31.07.2013?   -  person BlackICE    schedule 10.07.2013
comment
да, я хочу сказать, что если я прохожу 7/2013, он должен получить все бронирования за этот месяц, проверив даты начала и окончания всех бронирований в таблице.   -  person codeomnitrix    schedule 10.07.2013


Ответы (1)


Исходя из моего понимания вопроса, вам нужно что-то вроде этого:

declare @date datetime
Select booking_id, booking_description, start_date --you don't indicate which date field you want in the results
from test_table
where (start_date between @date and date_add(@date, INTERVAL 1 MONTH))
or (end_date between @date and date_add(@date, INTERVAL 1 MONTH))

SQL, вероятно, не точен, я знаю TSQL, а не MySQL, но это должно быть близко.

person BlackICE    schedule 10.07.2013
comment
Спасибо, BlackICE, видите ли, он пропустит сценарий, если дата начала - последний месяц, а дата окончания - следующий месяц. например. start_date = 23 июня 2013 г. и end_date = 4 августа 2013 г. И теперь, если я ищу данные за июль 2013 г., запрос завершится ошибкой. - person codeomnitrix; 10.07.2013
comment
ах, хорошо, это все усложняет, я подумаю. - person BlackICE; 10.07.2013
comment
эй, я разработал сом-запрос в моем вопросе, можете ли вы его проверить, это сработает. Я не могу узнать все сценарии. - person codeomnitrix; 10.07.2013