ts_allocation というテーブルの値をチェックして、一致する部屋が「割り当てられている」かどうかを確認する SQL クエリがあります (二次条件)。それらが「割り当てられている」場合、結果には返されません。残念ながら、設計上の制約により、この条件をテーブルに含めることはできなくなりました。
部屋に「保留中」、「失敗」、または「拒否」以外の値があるかどうかを確認するように変更したいと思います。3 つのいずれかの場合、結果が返され、(以前とは異なり) 無視されません。
部屋が最初の where 句で取得されると、システムは ts_allocation テーブルでそれらが「保留」、「失敗」、または「拒否」されているかどうかを確認する必要があります。部屋は特定の日または期間で予約できますが、ステータスが「保留中」、「失敗」、または「拒否」のままの場合は、表示されます。それ以外の場合は、部屋が予約されていることを意味します。
ここで意味を成していることを願っています...これまでの私のコードは次のとおりです。
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)