这是我的数据库:
SELECT s.id, s.row, s.num, s.roomID
FROM seat s
INNER JOIN screening scr
ON scr.roomID = s.roomID
LEFT JOIN booking b
ON s.id = b.seatID
WHERE b.seatID IS NULL AND scr.id = 6
这是我使用的查询:
.allowedUnits
所以我的问题是,对于筛选id = 2,roomID为1(意味着屏幕1)。假设客户预订了seatID' 1'这意味着行A,座位号1用于筛选1.当我运行此查询以显示另一个筛选ID的可用座位时,例如其中的6和房间相同(屏幕1),它将显示除seatID之外的所有座位1是由另一位客户预订的。
我想要的是每次放映都有自己的座位,问题在于它适用于每个房间。因此,如果另一个放映(电影)碰巧使用同一个房间,它也会与使用同一个房间的另一个放映相撞。
答案 0 :(得分:1)
以下内容应该为您提供Seats
的所有Screening
列表,id
sentinelValue
...
SELECT id AS seatID
FROM seat
WHERE roomID = ( SELECT roomID
FROM screening
WHERE screeningID = sentinelValue )
AND id NOT IN ( SELECT seatID
FROM booking
WHERE screeningID = sentinelValue );
我的逻辑如下......
要确定哪些Seats
仍适用于某个Screening
,我们必须首先了解Seats
最初可用的Screening
,即Seats
被分配给分配给Room
的{{1}}。
为此,我们从Screening
/ screening.id
的已知值开始,我将其称为screeningID
。
使用此已知值,我们可以使用以下SQL确定与sentinelValue
关联的room.id
/ roomID
...
screening
数据库仅显式记录SELECT roomID
FROM screening
WHERE screeningID = sentinelValue
seats
为booked
的{{1}},但未明确记录哪些screening
不是seats
。幸运的是,我们可以通过将booked
seats
的列表与分配给该booked
booked
的完整列表进行比较,推断出哪些seats
不是seats
(即可用) screening
,这是分配给seats
的{{1}}列表。
要获取已预订room
的列表,我使用了以下SQL ...
seats
然后,所有需要做的就是将SELECT seatID
FROM booking
WHERE screeningID = sentinelValue
的{{1}}列表分配给seats
screening's
room
NOT
。为此,我使用了答案开头的SQL。
如果您有任何问题或意见,请随时发表评论。
答案 1 :(得分:0)
我不确定我理解你的问题,但是你说:
我想要的是每次放映都有自己的座位
所以我只是根据roomID进行筛选和座位之间的连接查询:
select B.id as SeatID
,B.row as SeatRow
,B.num as SeatNum
,A.roomID as RoomID
, A.id as ScreeningID
from screening A
inner join seat B on A.roomID=B.roomID
这会返回一个数据集,每个席位和每个筛选一个记录