Фильтр 2 массивов с объектом в PHP - PullRequest
0 голосов
/ 28 мая 2019

Я пишу систему бронирования номеров в гостинице. У меня есть одна таблица в базе данных со всеми номерами в отеле (номера). Следующая таблица бронирования. Мне нужно написать функцию, для которой мне сообщат дату, время начала и окончания бронирования, и чтобы эта функция возвращала мне все свободные комнаты в течение заданного срока. Я не знаю, как кусать это полностью. Может ли кто-нибудь направить меня?

Я думал о том, чтобы получить все комнаты, затем все бронирования, с доставкой до даты проведения, но что дальше? Как все это устроить?

@ редактировать

Таблица номеров:

- id
- number

Стол бронирования:

- id
- room_id
- date
- time_start
- time_finish

1 Ответ

1 голос
/ 28 мая 2019

Вы можете сделать что-то вроде этого:

select rooms.* from rooms
left join reservations 
on rooms.id = reservations.room_id
and reservations.date = '2019-05-28' and reservations.time_start < '14:00' and reservations.time_finish > '14:00'
where reservations.id is null

Если схема теста имеет вид:

SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

CREATE TABLE `reservations` (
  `id` int(11) NOT NULL,
  `room_id` int(11) NOT NULL,
  `date` date NOT NULL,
  `time_start` time NOT NULL,
  `time_finish` time NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `reservations` (`id`, `room_id`, `date`, `time_start`, `time_finish`) VALUES
(0, 2,  '2019-05-28',   '13:00:00', '16:00:00');

CREATE TABLE `rooms` (
  `id` int(11) NOT NULL,
  `name` varchar(15) NOT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `rooms` (`id`, `name`) VALUES
(1, 'room1'),
(2, 'room2');

Пример скрипки:

http://sqlfiddle.com/#!9/f82a5c/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...