2011-04-11 46 views
-1

我很困惑我如何才能返回尚未预订的座位。仅检索可用座位?

我已经给出

商店2个场地在同一表座位信息的表模式(每个50个座位)

我然后有一个SeatBooking表它接受seatNumber场馆和预订号码,使它独一无二的表现。

这个想法很多是:创建一个名为SeatStatus的字段,其布尔值数据类型设置为True(如果采用)和False(如果可用)。然后,查询返回所有SeatStatus = false的位置。

这可以在这种情况下完成吗?

回答

0

这不是特定于你正在做的语言,但我会使用SQL LEFT JOIN来做到这一点。

基本上这种类型的加入表示您知道左侧存在(在这种情况下为座位表),但右侧(预订信息)可能不存在,因此您可能会得到空值。左侧将座位信息表加入座位预订表,选择您要查找信息的性能。作为最后的条件,检查预订信息是否为空,因为如果是,座位尚未预留。

如果您的SQL表按照他们应该的方式进行了优化,那么速度会非常快,您将得到一个结果,只有无保留的席位,因此您不需要在代码中执行任何筛选,并且可以拥有SQL服务器为你做了繁重的工作。 (这通常是最有效的方法)

您需要快速完成此操作的索引是预订信息表上的座位号和性能。

下面是这个查询的一般形式:

SELECT seat.* FROM seating seat LEFT JOIN bookings book ON seat.number = book.seat_number,book.performance = 'SOME PERFORMANCE ID' WHERE seat.venue = 'SOME VENUE' AND book.performance is null; 

试试这个没有'AND book.performance是空的第一个,并选择预订表以及确保你得到的所有数据,而且,重要的是,每个座位只有一排。

+0

此外,您可能希望确保booking.seat_number和booking.performance是唯一索引或主键。这样可以避免重复预订同一个席位,以确保在查询过程中不会出现重复的行。 – SplinterReality 2011-04-11 07:12:35