мне нужна помощь запрашивая мой календарь/таблица датыSQL/Mysql запросов доступные даты и времени в базе данных
Сценарий: У меня есть «календарь» таблица с датами и временем (см ниже), пользователи смогут установить их наличии даты, обычно день за днем с доступными временными интервалами на каждый день. Так что моя таблица выглядит следующим образом:
+------+------------+---------------------+---------------------+
| ID | user_id | start_date | end_date |
+------+------------+---------------------+---------------------+
| 1 | 1 | 2016-09-01 08:00:00 | 2016-09-01 16:00:00 |
| 2 | 1 | 2016-09-03 00:00:00 | 2016-09-03 23:59:59 |
| 3 | 1 | 2016-09-04 00:00:00 | 2016-09-04 16:00:00 |
| 4 | 1 | 2016-09-05 08:00:00 | 2016-09-05 16:00:00 |
| 5 | 2 | 2016-09-05 08:00:00 | 2016-09-05 16:00:00 |
| 6 | 2 | 2016-09-07 08:00:00 | 2016-09-07 16:00:00 |
| 7 | 2 | 2016-09-08 08:00:00 | 2016-09-08 16:00:00 |
| 8 | 2 | 2016-09-08 18:00:00 | 2016-09-08 22:00:00 |
+------+------------+---------------------+---------------------+
У нас есть 2 пользователей здесь, поэтому я хочу следующее:
Если я ищу датой_начала = 2016-09-05 8:00:00 и end_date = 2016-09-05 16:00:00 он должен возвращать пользователя 1 и 2. Поскольку у обоих из них есть запись с этими датами. То же самое происходит, если start_date = 2016-09-05 09:00:00 и end_date = 2016-09-05 15:00:00, это должно также вернуть обоих пользователей с момента поиска im, между временными интервалами, как показанном в примере.
Второй сценарий немного сложнее, если пользователь ищет start_date = 2016-09-03 08:00:00 и end_date = 2016-09-04 16:00:00 Я хочу, чтобы запрос проверял следующие:
- Посмотрите, доступен ли пользователь каждый день в это время.
- поэтому в этом случае пользователь доступен в 2016-09-03 между 08:00:00 и 16:00:00, а также с 2016-09-04 между 08:00:00 и 16:00: 00.
- В примере по этому поводу должен возвращать пользователь 1.
Im открыт для предложения на вновь разработанные мою схему, если это необходимо.
Надеюсь, что некоторые из них могут мне помочь.
Первый случай его работы но не второй. Если я ищу от 2016-09-01 08:00:00 до 2016-09-04 17:00:00 Я получаю 3 результата с пользователем 1, но должен получить только 1. Пользователь 1 доступен только на 2016- 09-03 с 08:00:00 до 17:00:00. –
Я отвечаю только на первую часть, вторая требует много работы, не очень тривиальна.Вам нужно разбить диапазон на несколько дат –
проверить версию обновления. –