我有一个 SQL 查询,它检查名为 ts_allocation 的表中的值,以查看匹配的房间是否已“分配”(次要条件)。如果它们是“分配的”,那么它不会在结果中返回它们。不幸的是,由于设计限制,我的表中不能再出现这种情况了。
我现在想更改它,以便查看房间的值是否不是“待定”、“失败”或“拒绝”。如果它是三个中的任何一个,那么结果将被返回并且不会被忽略(与以前不同)。
在第一个 where 子句中获取房间后,系统需要在 ts_allocation 表中检查它们是否为“Pending”、“Failed”或“Declined”。房间可以预订特定日期或时间段 - 但如果其状态仍为“待定”、“失败”或“已拒绝”,则会查看该房间。其他任何事情都意味着房间已被预订。
我希望我在这里有意义......到目前为止,这是我的代码:
SELECT
COUNT(*) totalCount
FROM
ts_room rm
WHERE building_id=:building_id AND
NOT EXISTS (
SELECT 1
FROM ts_roompref rp
JOIN ts_request rq
ON rp.request_id = rq.id
AND day_id = 4
AND period_id = ".$i."
WHERE
rm.id = rp.room_id)
AND NOT EXISTS (
SELECT 1
FROM ts_roompref rp
JOIN ts_allocation a
ON rp.request_id = a.request_id
AND a.status = 'Allocated'
WHERE
rm.id = rp.room_id)