Первое, что вам нужно, это таблица дат, день за днем.Теперь MySQL не мое дело, поэтому я постараюсь записать как можно больше информации о том, что я делаю.Пожалуйста, исправьте эти примеры.
Таблица дат может быть подготовлена путем проверки работы на последнюю дату бронирования и добавления недостающих дат в таблицу дат.Если это не то, что вы бы приняли, другое решение заключается в создании таблицы динамически, но есть некоторые опасности.Насколько мне известно, создать такую таблицу невозможно, но вы можете создать практически работающий суррогат, выбрав в таблице бронирования разные даты и скрестив их с таблицей дней, созданной в самом запросе:1005 * Список дней должен содержать столько дней, сколько самый большой разрыв между датами регистрации и каждой датой регистрации и датой проверки.Это то, за чем вам придется следить, или просто сделать список достаточно большим, например, на сто дней.
Теперь, когда у вас есть таблица дат, вам нужно подсчитать количество заказов, соответствующих этой дате.Полный запрос будет выглядеть так:
select tableOfDates.date, count(bookings.checkIn) bookings
from
(
(
select distinct dates.date + INTERVAL days.day DAY -- OR HOWEVER you add days in mysql
from
(select distinct checkIn date from bookings union select distinct checkOut from bookings) dates
cross join (select 0 day union select 1 union select 2 union 3 union 4 union 5 union 6 union 7) days
)
) tableOfDates
left join bookings
on tableOfDates.date between bookings.checkIn and bookings.checkOut
where tableOfDates.date between [YOUR DATE RANGE]