2015-12-07 3 views
0

Просто нужна небольшая помощь при построении sql-запроса для полного noob. Я скопировал схему db ниже;SQL-запрос - нужна помощь при построении

+2

Я не думаю, что вам полезно хранить – Strawberry

+0

«Однако при обновлении значения необходимо учитывать DDate и TTime». - Что вы имеете в виду? –

+0

Несомненно, это также должно быть обновление, а не вставка, поскольку строка 'Chair' должна существовать, когда вы меняете ее доступность. О, и вы UPDATE/INSERT a Имя таблицы i.e. 'Chair' – RiggsFolly

ответ

0

Ваш дизайн отключен от цели.
Атрибут Свобода описывает общий стул, а не стул в момент времени. Представьте, что у вас есть два шоу - один сегодня, другой через 10 дней. Люди заказывают сегодняшнее шоу, стул стола обновляется, и сиденье теперь занято. Теперь кто-то хочет слишком заказать позднее шоу и .. Дох, его занят. И если у вас есть 100 шоу, и у каждого будет только 1 участник, вы все равно в итоге получите 100 занятых стульев за каждое шоу.

Это заявление даст вам все места с их статусом для конкретного шоу

select c.chair_id, 
(case when b.chair_id is null then 1 else 0 end) available 
from shows s 
inner join booki1 b on s.show_id = b.show_id 
left join chairs c on b.chair_id = c.chair_id 
where s.show_id = *insert show id here* 

Это позволит выбрать все доступные стулья для конкретного шоу.
Также я бы предложил использовать некоторый автоинкрементный целочисленный идентификатор для стульев/шоу. И наличие двух столбцов для даты/времени выглядит действительно странным, если у вас есть столбец DateTime. Пройдет некоторое время, чтобы представить себе конкретную ситуацию, в которой вам это действительно нужно.

+0

Спасибо за объяснение - очень полезно и можете видеть, где я ушел с цели. Из схемы, как вы думаете, можно выбрать все места (независимо от того, были ли они еще забронированы), но затем указать, какие из них уже были забронированы в моей системе бронирования? .. идеально, я хочу заполнить свою веб-страницу отсутствующими и доступными местами, а затем стирать недоступные в качестве «красного» в качестве примера. –

+0

Вы можете получить доступный/недоступный при выборе, и было бы разумно создать представление для этот запрос. Я скоро обновлю свой ответ – evictednoise

+0

, вы можете сделать это в виде, который будет возвращать информацию обо всех резервированиях для всех шоу, слегка изменив запрос, чтобы включить show_id для последующей фильтрации, или вы можете сделать его функцией и передать show_id как параметр – evictednoise

Смежные вопросы