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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2017, 12:30   #11
Мистер
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 9
По умолчанию

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

Цитата:
Сообщение от Мистер Посмотреть сообщение
Спасибо, но всё таки произошло наложение дат. Поиск осуществляем лишь по дате конца и начала, и поэтому комнаты которые заняты в более узкий промежуток времени тоже попадают. Например у меня заказ с 2017.02.23 по 2017.02.26, и есть комната которая занята с 2017.02.22 по 2017.02.24, и эта комната попадает в наш запрос, хотя не должна...
Спасибо
Спасибо,мой был косяк,запрос вроде верен.
Мистер вне форума Ответить с цитированием
Старый 27.04.2017, 12:04   #13
Мистер
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
WHERE NOT EXISTS(SELECT * FROM order WHERE arrival_date<=ДатаКонцаПериода AND depature_date>=ДатаНачалаПериода AND room_id=room.r_id)
А подскажите пожалуйста как ещё производить отбор по количеству мест в комнатах?
Я сделал так
Код:
SELECT *
 FROM room
 WHERE NOT EXISTS(SELECT * FROM `Order`  WHERE arrival_date<='2017.02.26' AND depature_date>='2017.02.23' AND room_id=room.r_id ) AND room_places>='4'
Но мне нужно чтобы было задействовано поле Ordera а именно places_amount а не поле Room room_places.

Я не до конца разобрался с NOT EXISTS и сделал так, но выдаёт ошибочно все комнаты:
Код:
 SELECT *
 FROM room
 WHERE NOT EXISTS(SELECT * FROM `Order`  WHERE arrival_date<='2017.02.26' AND depature_date>='2017.02.23' And places_amount>='4'
 AND room_id=room.r_id )
Подскажите пожалуйста как быть.
Мистер вне форума Ответить с цитированием
Старый 27.04.2017, 12:57   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Надо полагать, что places_amount - количество занятых мест, а room_places - всего мест в комнате, и нужно отобрать те комнаты, которые в заданный период имеют каr минимум 2 свободных места например? Так попробуй
Код:
SELECT *
 FROM room
 WHERE NOT EXISTS(SELECT * FROM `Order`  
   WHERE arrival_date<='2017.02.26' AND depature_date>='2017.02.23' AND 
         room.room_places-places_amount<2'  AND room_id=room.r_id )
EXISTS означает существует, добавь NOT получится не существует ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.04.2017 в 13:41.
Аватар вне форума Ответить с цитированием
Старый 27.04.2017, 17:00   #15
Мистер
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 9
Вопрос

Цитата:
Сообщение от Аватар Посмотреть сообщение
Надо полагать, что places_amount - количество занятых мест, а room_places - всего мест в комнате, и нужно отобрать те комнаты, которые в заданный период имеют каr минимум 2 свободных места например? Так попробуй
Код:
SELECT *
 FROM room
 WHERE NOT EXISTS(SELECT * FROM `Order`  
   WHERE arrival_date<='2017.02.26' AND depature_date>='2017.02.23' AND 
         room.room_places-places_amount<2'  AND room_id=room.r_id )
EXISTS означает существует, добавь NOT получится не существует ))
Суть вот в чём: Пользователь устанавливает дату приезда, дату отъезда и количество человек(places_amount), а запрос должен показать все комнаты удовлетворяющие этому условию(то есть чтобы занятые комнаты попадающие на указанные даты не показывались и количество мест в комнате было таким же или больше чем указал пользователь).

Пробовал Ваш запрос для как минимум 5 свободных мест протестить, и почему-то выдало не то что нужно(показывает комнаты с 2-мя и 4-мя местами):
Код:
SELECT *
 FROM room
 WHERE NOT EXISTS(SELECT * FROM `Order`  
   WHERE arrival_date<='2017.02.26' AND depature_date>='2017.02.23' AND 
         room.room_places-places_amount<'5'  AND room_id=room.r_id )
Подскажите пожалуйста как быть.
Изображения
Тип файла: png запрос.png (55.7 Кб, 69 просмотров)
Тип файла: png таблица заказов.png (37.1 Кб, 118 просмотров)
Мистер вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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