
大家好,我正在建立一个房间分配系统,检查一个房间是否在给定日期可用.有大约20个独特的房间ID,我只是作为几个以上的片段包括在内.
因此,例如,如果用户键入2012-01-01的日期,我希望从结果中排除room_id为1,因为如上所述,它已经在该日期预订.
在某种意义上,在用户的输入日期之间找到的任何匹配都应该导致从列表中排除相应room_id的整个列表.
我使用下面的SQL查询:
SELECT DISTINCT room_id
FROM room_booking
WHERE date_booked<>'$date'
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用,因为虽然它排除了单行的结果,但它包含了给定room_id的其余结果?
Jus*_*ave 12
你可以用一个 NOT EXISTS
SELECT DISTINCT room_id
FROM room_booking rb1
WHERE NOT EXISTS( SELECT 1
FROM room_booking rb2
WHERE rb2.date_booked = <<date>>
AND rb2.room_id = rb1.room_id )
Run Code Online (Sandbox Code Playgroud)
或者a NOT IN
SELECT DISTINCT room_id
FROM room_booking
WHERE room_id NOT IN (SELECT room_id
FROM room_booking rb2
WHERE rb2.date_booked = <<date>>)
Run Code Online (Sandbox Code Playgroud)
Che*_*min 11
没试过这个,但是这里有
SELECT DISTINCT room_id
FROM room_booking
WHERE room_id NOT IN
(SELECT DISTINCT room_id
FROM room_booking
WHERE date_booked = '$date'
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53507 次 |
| 最近记录: |