Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 13.12.2016
Сообщений: 5

Показать все комнаты которые не заняты в заданный промежуток времени без наложения дат

24.04.2017, 23:02. Показов 1334. Ответов 6

Студворк — интернет-сервис помощи студентам
Есть таблицы :

`Order`[ `o_id`,
`arrival_date`,
`depature_date`,
`places_amount,
`pay_type` '(1 - booking ; 0 - complete payment)',
`discount`,
`status` ' ( 0-new,1 - confirmed , 2 - (not confirmed) rejected, 3 - archived). ',
`User_id`,
`Room_id` ]

`Room` [`r_id`,
`room_number`,
`room_places` ,
`price` ,
`status` '0-FREE, 1-BOOKED, 2-TAKEN' ]

Необходимо показать комнаты которые не заняты в заданный период, и чтобы не происходило наложения дат то есть:
Показать комнаты которые room.status='0' FREE в промежуток arrival_date=? и depature_date=? без наложения дат.

Помогите пожалуйста кто связывался с подобными задачами

Вот готовый скрипт БД
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
 
-- -----------------------------------------------------
-- Schema Hostel
-- -----------------------------------------------------
-- Hostel system. The client fills in the Request for booking or for complete payment specifying necessary number of places. The administrator confirms (rejects) the arrived Request, does discounts to regular customers, puts a ban to the clients who violated rules of system.
 
-- -----------------------------------------------------
-- Schema Hostel
--
-- Hostel system. The client fills in the Request for booking or for complete payment specifying necessary number of places. The administrator confirms (rejects) the arrived Request, does discounts to regular customers, puts a ban to the clients who violated rules of system.
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `Hostel` DEFAULT CHARACTER SET utf8 ;
USE `Hostel` ;
 
-- -----------------------------------------------------
-- Table `Hostel`.`User`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Hostel`.`User` (
`u_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`role` BIT(1) NOT NULL DEFAULT 1 COMMENT 'Shows role( 1 - User , 0 - Admin)',
`name` VARCHAR(45) NOT NULL COMMENT 'Client\'s name',
`surname` VARCHAR(45) NOT NULL COMMENT 'Client\'s surname',
`login` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL,
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '0 - the user is banned. If client wasn\'t banned field value is NULL',
PRIMARY KEY (`u_id`),
UNIQUE INDEX `login_UNIQUE` (`login` ASC))
ENGINE = InnoDB
COMMENT = 'Client Table. It represents the client entity. The client has a role (user or admin), name, offer, as well as banned attribute (banned or not).';
 
 
-- -----------------------------------------------------
-- Table `Hostel`.`Room`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Hostel`.`Room` (
`r_id` TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Each room is unique.I think that\'s enough 255 hostel rooms',
`room_number` TINYINT(3) UNSIGNED NOT NULL,
`room_places` TINYINT(3) UNSIGNED NOT NULL COMMENT 'Shows how many places in the room',
`price` DECIMAL(5,2) UNSIGNED NOT NULL COMMENT 'It shows the cost of the room, use decimal.',
`status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0-FREE, 1-BOOKED, 2-TAKEN',
PRIMARY KEY (`r_id`))
ENGINE = InnoDB
COMMENT = 'Table room. The room has a number of places and price.';
 
 
-- -----------------------------------------------------
-- Table `Hostel`.`Order`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Hostel`.`Order` (
`o_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`arrival_date` DATE NOT NULL COMMENT 'It shows the client arrival date',
`depature_date` DATE NOT NULL COMMENT 'It shows the client departure date',
`places_amount` TINYINT(3) UNSIGNED NOT NULL COMMENT 'It shows the number of visitors',
`pay_type` TINYINT(1) NOT NULL COMMENT 'It shows the type of payment(1 - booking ; 0 - complete payment)',
`discount` DECIMAL(4,2) NULL DEFAULT 0,
`status` TINYINT(1) NULL DEFAULT 0 COMMENT 'It shows order status ( 0-new,1 - confirmed , 2 - (not confirmed) rejected, 3 - archived). ',
`User_id` INT UNSIGNED NOT NULL COMMENT 'Shows client ID',
`Room_id` TINYINT(3) UNSIGNED NOT NULL,
`approver_id` INT NULL DEFAULT NULL,
PRIMARY KEY (`o_id`),
INDEX `fk_Application_Client1_idx` (`User_id` ASC),
INDEX `fk_Order_Room1_idx` (`Room_id` ASC),
CONSTRAINT `fk_Application_Client1`
FOREIGN KEY (`User_id`)
REFERENCES `Hostel`.`User` (`u_id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_Order_Room1`
FOREIGN KEY (`Room_id`)
REFERENCES `Hostel`.`Room` (`r_id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
COMMENT = 'Table application. The application consists of the arrival date, departure date, number of places required, type of payment (complete payment of booking), as well as the confirmed field (confirmed or not confirmed(rejected)) . ';
 
 
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
 
-- -----------------------------------------------------
-- Data for table `Hostel`.`User`
-- -----------------------------------------------------
START TRANSACTION;
USE `Hostel`;
INSERT INTO `Hostel`.`User` (`u_id`, `role`, `name`, `surname`, `login`, `password`, `status`) VALUES (1, 0, 'Админ', 'Админ', 'админ', md5('admin1'), 1);
INSERT INTO `Hostel`.`User` (`u_id`, `role`, `name`, `surname`, `login`, `password`, `status`) VALUES (2, 1, 'Иван', 'Петров', 'петров_ваня', md5('petrof123'), 1);
INSERT INTO `Hostel`.`User` (`u_id`, `role`, `name`, `surname`, `login`, `password`, `status`) VALUES (3, 1, 'Андрей', 'Серов', 'серов_андр', md5('sero4'), 1);
INSERT INTO `Hostel`.`User` (`u_id`, `role`, `name`, `surname`, `login`, `password`, `status`) VALUES (4, 1, 'Виктор', 'Соболев', 'соболев_витя', md5('sobole4vit9'), 1);
INSERT INTO `Hostel`.`User` (`u_id`, `role`, `name`, `surname`, `login`, `password`, `status`) VALUES (5, 1, 'Дмитрий', 'Аверин', 'дима_авер', md5('d1man'), 1);
INSERT INTO `Hostel`.`User` (`u_id`, `role`, `name`, `surname`, `login`, `password`, `status`) VALUES (6, 1, 'Ольга', 'Токарева', 'оля_ток', md5('ol9тtokarev4a'), 0);
INSERT INTO `Hostel`.`User` (`u_id`, `role`, `name`, `surname`, `login`, `password`, `status`) VALUES (7, 1, 'Петр', 'Демидов', 'петя_демид', md5('demido4'), 1);
INSERT INTO `Hostel`.`User` (`u_id`, `role`, `name`, `surname`, `login`, `password`, `status`) VALUES (8, 1, 'Екатерина', 'Власова', 'катя_влас', md5('kat9vlas'), 1);
 
COMMIT;
 
 
-- -----------------------------------------------------
-- Data for table `Hostel`.`Room`
-- -----------------------------------------------------
START TRANSACTION;
USE `Hostel`;
INSERT INTO `Hostel`.`Room` (`r_id`, `room_number`, `room_places`, `price`, `status`) VALUES (1, 1, 2, 5.25, 1);
INSERT INTO `Hostel`.`Room` (`r_id`, `room_number`, `room_places`, `price`, `status`) VALUES (2, 2, 2, 5.45, 1);
INSERT INTO `Hostel`.`Room` (`r_id`, `room_number`, `room_places`, `price`, `status`) VALUES (3, 3, 3, 10.25, 2);
INSERT INTO `Hostel`.`Room` (`r_id`, `room_number`, `room_places`, `price`, `status`) VALUES (4, 4, 3, 10, 1);
INSERT INTO `Hostel`.`Room` (`r_id`, `room_number`, `room_places`, `price`, `status`) VALUES (5, 5, 4, 15, 2);
INSERT INTO `Hostel`.`Room` (`r_id`, `room_number`, `room_places`, `price`, `status`) VALUES (6, 6, 5, 20, 2);
INSERT INTO `Hostel`.`Room` (`r_id`, `room_number`, `room_places`, `price`, `status`) VALUES (7, 7, 6, 25, 2);
INSERT INTO `Hostel`.`Room` (`r_id`, `room_number`, `room_places`, `price`, `status`) VALUES (8, 8, 4, 12.50, 0);
 
 
COMMIT;
 
 
-- -----------------------------------------------------
-- Data for table `Hostel`.`Order`
-- -----------------------------------------------------
START TRANSACTION;
USE `Hostel`;
INSERT INTO `Hostel`.`Order` (`o_id`, `arrival_date`, `depature_date`, `places_amount`, `pay_type`, `discount`, `status`, `User_id`, `Room_id`, `approver_id`) VALUES (1, '2017.02.22', '2017.02.24', 2, 0, 0, 1, 2, 1, NULL);
INSERT INTO `Hostel`.`Order` (`o_id`, `arrival_date`, `depature_date`, `places_amount`, `pay_type`, `discount`, `status`, `User_id`, `Room_id`, `approver_id`) VALUES (2, '2017.02.24', '2017.02.26', 2, 1, 0, 1, 3, 2, NULL);
INSERT INTO `Hostel`.`Order` (`o_id`, `arrival_date`, `depature_date`, `places_amount`, `pay_type`, `discount`, `status`, `User_id`, `Room_id`, `approver_id`) VALUES (3, '2017.02.24', '2017.02.27', 3, 1, 0, 0, 4, 3, NULL);
INSERT INTO `Hostel`.`Order` (`o_id`, `arrival_date`, `depature_date`, `places_amount`, `pay_type`, `discount`, `status`, `User_id`, `Room_id`, `approver_id`) VALUES (4, '2017.02.25', '2017.02.28', 3, 0, 0, 1, 5, 4, NULL);
INSERT INTO `Hostel`.`Order` (`o_id`, `arrival_date`, `depature_date`, `places_amount`, `pay_type`, `discount`, `status`, `User_id`, `Room_id`, `approver_id`) VALUES (5, '2017.03.01', '2017.03.03', 4, 1, 0, 2, 6, 5, NULL);
INSERT INTO `Hostel`.`Order` (`o_id`, `arrival_date`, `depature_date`, `places_amount`, `pay_type`, `discount`, `status`, `User_id`, `Room_id`, `approver_id`) VALUES (6, '2017.03.04', '2017.03.05', 5, 1, 0, 0, 7, 6, NULL);
INSERT INTO `Hostel`.`Order` (`o_id`, `arrival_date`, `depature_date`, `places_amount`, `pay_type`, `discount`, `status`, `User_id`, `Room_id`, `approver_id`) VALUES (7, '2017.03.04', '2017.03.06', 6, 0, 0, 3, 8, 7, NULL);
 
COMMIT;
Миниатюры
Показать все комнаты которые не заняты в заданный промежуток времени без наложения дат  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2017, 23:02
Ответы с готовыми решениями:

Исполнение потока в заданный промежуток времени
Вобщемт нужно сделать так, чтобы поток выполнялся не судорожно в скором темпе на макс нагрузке на ЦП, а в одном из вариантов: 1)...

Выполнить действие через заданный промежуток времени
Как сделать так, чтобы через каждый промежуток времени(15мин) выполнялось определённое действие?

Плавное включение шим, за заданный промежуток времени.
Всем доброй ночи. У меня такой вопрос : как написать код на Си, для плавного включения ШИМ к примеру за 5 секунд. Плавное включение...

6
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
25.04.2017, 02:32
Цитата Сообщение от MISTER_IG Посмотреть сообщение
Показать комнаты которые room.status='0' FREE в промежуток arrival_date=? и depature_date=?
Room.status неуместен, т.к. бессмысленен: свободный сегодня он уже может быть забронирован или занят на завтра. Занятый сегодня он может освободиться завтра, а Order может быть как раз с завтрашнего дня. Кто и когда присваивает ему значение? И главное, как и зачем?

Добавлено через 4 минуты
Цитата Сообщение от MISTER_IG Посмотреть сообщение
которые не заняты в заданный период
тоже как-то мутно. Если человек заезжает на 10 дней и нет ни одного номера, свободного все эти 10 дней, его может устроить вариант 5 первых дней в одном номере, 5 - в другом. Это тоже входит в понятие которые не заняты в заданный период?
0
0 / 0 / 0
Регистрация: 13.12.2016
Сообщений: 5
25.04.2017, 09:32  [ТС]
Да, по поводу Room.status полностью согласен, я думал, что о поможет решить проблему, но оказывается он только запутает, да и нет в нём смысла.
По поводу второго: да, его могут устроить 5 дней в одном номере 5 дней в другом.( но хотелось бы попроще сделать чтобы всё время он провёл только в одном номере)[но если вдруг есть решение когда 5 дней в одном 5 дней в другом, хотелось бы тоже посмотреть].
Большое спасибо
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
25.04.2017, 09:53
А вы точно уверены, что решение от MS SQL вас устроит? А то из скрипта создания торчат уши MySQL
0
0 / 0 / 0
Регистрация: 13.12.2016
Сообщений: 5
25.04.2017, 10:09  [ТС]
База у меня на MySQL, хотелось бы конечно на MySQL, но если нет, то хотя бы что-то, чтобы знать в каком направлении двигаться, запутался я=(
Спасибо
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
25.04.2017, 11:16
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE @DateFrom datetime, @DateTo datetime
SET @DateFrom = '20170225' SET @DateTo = '20170307'
DECLARE @Days TABLE (Day dateTime)
DECLARE @Day datetime
SET @Day = @DateFrom;
WHILE @Day <= @DateTo BEGIN  
  INSERT INTO @Days SELECT @Day
  SET @Day = DATEADD(day, 1, @Day)
END
 
SELECT r.r_id, Count(d.Day) DaysFree
FROM
  dbo.Rooms r
  JOIN @Days d ON 1 = 1
  LEFT JOIN dbo.Orders o ON r.r_id = o.Room_id and d.Day BETWEEN o.arrival_date AND o.depature_date
WHERE
  o.o_Id IS NULL
GROUP BY  r.r_id
HAVING Count(d.Day) = DATEDIFF(day, @DateFrom, @DateTo) + 1
Добавлено через 2 минуты
а у меня MS SQL. Но и на MySQL все это выполнимо, пожалуй. Но адаптировать и проверит не на чем
0
0 / 0 / 0
Регистрация: 13.12.2016
Сообщений: 5
25.04.2017, 20:15  [ТС]
Спасибо и на этом=)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2017, 20:15
Помогаю со студенческими работами здесь

Выполнение действий через заданный промежуток времени
Нужен самый простой пример програмки на си++ (работаю в вижуал студио), которая будет каждый равный промежуток времени выполнять какоето...

Alarm не срабатывает через заданный промежуток времени
Всех приветствую. Мне нужно написать будильник. Для решения этой задачи я решил использовать класс alarm,поскольку,как я понял,он лучше...

Таймер (выполнение кода через заданный промежуток времени)
Всем привет, подскажите, как создать внутренний таймер, то есть через что бы через некоторое количество секунд, программа опять выполняла...

Определить количество бактерий через заданный промежуток времени
Каждая бактерия ежеминутно делится на 2. Если в начале у нас была одна бактерия, то сколько бактерий появится через 5, 7, 9, ..., 15...

Ttimer смена интервала через заданный промежуток времени
Доброго времени суток. Такая задачка: Нужно заставить таймер срабатывать через разный промежуток времени. Т.е. ....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru