Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2017, 23:09   #1
Мистер
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 9
По умолчанию показать комнаты которые не заняты в заданный период, и чтобы не происходило наложения дат

Есть таблицы :

`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=? без наложения дат.

Помогите пожалуйста кто связывался с подобными задачами
Изображения
Тип файла: png БД.png (88.0 Кб, 47 просмотров)
Вложения
Тип файла: txt Скрипт БД.txt (8.6 Кб, 110 просмотров)
Мистер вне форума Ответить с цитированием
Старый 25.04.2017, 09:15   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

www.programmersforum.ru/showthread.php?t=307578
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.04.2017, 09:26   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Не понятно назначение поля status в room

Код:
SELECT *
  FROM room
  WHERE NOT EXISTS(SELECT * FROM order WHERE arrival_date<=ДатаКонцаПериода AND depature_date>=ДатаНачалаПериода)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.04.2017, 10:06   #4
Мистер
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не понятно назначение поля status в room

Код:
SELECT *
  FROM room
  WHERE NOT EXISTS(SELECT * FROM order WHERE arrival_date<=ДатаКонцаПериода AND depature_date>=ДатаНачалаПериода)
К сожалению данный запрос не работает:
Код:
SELECT *
  FROM room
  WHERE NOT EXISTS(SELECT * FROM order WHERE arrival_date<=ДатаКонцаПериода AND depature_date>=ДатаНачалаПериода)
Вот такой запрос ничего не выдаёт, хотя должен выдавать несколько комнат, не попадающих под даты.

Код:
SELECT *
  FROM room
  WHERE NOT EXISTS(SELECT * FROM `order` WHERE arrival_date<='2017.03.06' AND depature_date>='2017.03.04')
Скрин таблицы Order с датами я прикрепил. Также есть готовый скрипт БД в самом условии выше я прикрепил.
Спасибо.
Изображения
Тип файла: png таблица заказов.png (37.1 Кб, 110 просмотров)
Тип файла: png запрос.png (43.4 Кб, 116 просмотров)
Мистер вне форума Ответить с цитированием
Старый 25.04.2017, 10:29   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
WHERE NOT EXISTS(SELECT * FROM order WHERE arrival_date<=ДатаКонцаПериода AND depature_date>=ДатаНачалаПериода AND room_id=room.r_id)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.04.2017, 11:00   #6
Мистер
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 9
По умолчанию

Спасибо, но всё таки произошло наложение дат. Поиск осуществляем лишь по дате конца и начала, и поэтому комнаты которые заняты в более узкий промежуток времени тоже попадают. Например у меня заказ с 2017.02.23 по 2017.02.26, и есть комната которая занята с 2017.02.22 по 2017.02.24, и эта комната попадает в наш запрос, хотя не должна...
Спасибо
Изображения
Тип файла: png запрос1.png (75.6 Кб, 121 просмотров)
Тип файла: png таблица заказов.png (37.1 Кб, 119 просмотров)
Вложения
Тип файла: txt Скрипт БД.txt (8.6 Кб, 120 просмотров)
Мистер вне форума Ответить с цитированием
Старый 25.04.2017, 11:09   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дык это другой запрос. У меня было меньше или равно и больше или равно, а не строгое меньше и больше
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.04.2017, 20:13   #8
Мистер
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Дык это другой запрос. У меня было меньше или равно и больше или равно, а не строгое меньше и больше
Я и с нестрогим пробывал,всё равно не получается=(
Сам не понимаю почему 1-ая комната добавляется(
Изображения
Тип файла: png запрос2.png (73.9 Кб, 119 просмотров)
Тип файла: png таблица заказов.png (37.1 Кб, 121 просмотров)
Мистер вне форума Ответить с цитированием
Старый 26.04.2017, 10:07   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

прошу прощения прошлый раз дал кривую ссылку.
вот правильная
http://www.programmersforum.ru/showp...66&postcount=5
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 26.04.2017, 12:23   #10
Мистер
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
прошу прощения прошлый раз дал кривую ссылку.
вот правильная
http://www.programmersforum.ru/showp...66&postcount=5
Cпасибо, вроде изменил запрос под свой, но всё рвно выводит 1 комнату почему-то, даже не знаю почему=(

Код:
select * from room as R where
    not exists ( -- и проверяем некорректные ситуации
                  select 1 from `Order` as test
                 where  test.Room_id =R.r_id -- для нашего авто
                   and ( ('2017.02.23'<=test.arrival_date and '2017.02.26'>=test.arrival_date) -- хотим начать ДО и НЕ УСПЕЕМ  закончить
                      or ('2017.02.23'>=test.arrival_date and '2017.02.23'<=test.depature_date ) -- хотим начать ВО время другого проката
                      )
                )
Изображения
Тип файла: jpg запрос3.jpg (37.2 Кб, 110 просмотров)
Тип файла: png таблица заказов.png (37.1 Кб, 114 просмотров)
Мистер вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Адреса сайтов заняты или не заняты Ципихович Эндрю Общие вопросы Web 10 13.05.2014 11:18
Заданный одномерный массив. Найти сумму элементов массива, которые удовлетворяют условию ( Delphi ) Святослав2703 Помощь студентам 5 03.07.2013 16:21
по списку календарных дат найте те, которые являются понедельниками (в Delphi) zheka21 Помощь студентам 6 08.11.2012 10:28
Как сделать чтобы при создании формы происходило 2 события? artbotva Общие вопросы Delphi 7 06.05.2012 18:27
5 дат, которые должен знать каждый Гриха Свободное общение 37 23.02.2007 18:41