Я бьюсь головой о каком-то SQL-запросе и в значительной степени его логике.
Предположим, у нас есть эти таблицы:
Таблица отелей
+----+---------+
| id | name |
+----+---------+
| 1 | Hotel A |
+----+---------+
Стол hotel_rooms
+----+----------+-----------+
| id | hotel_id | room_type |
+----+----------+-----------+
| 1 | 1 | dbl | <- can be used as A,B,C,D,E,F
| 2 | 1 | dbl | <- can be used as B,C,D,E,F
| 3 | 1 | sng | <- can be used as A
| 4 | 1 | trp | <- can be used as D,E,F
+----+----------+-----------+
Стол hotel_room_usages
+----+---------+-------+
| id | room_id | usage |
+----+---------+-------+
| 1 | 1 | B |
| 2 | 1 | C |
| 3 | 1 | A |
| 4 | 1 | D |
| 5 | 1 | E |
| 6 | 1 | F |
| 7 | 2 | B |
| 8 | 2 | C |
| 9 | 2 | D |
| 10 | 2 | E |
| 11 | 2 | F |
| 12 | 3 | A |
| 13 | 4 | D |
| 14 | 4 | E |
| 15 | 4 | F |
+----+---------+-------+
Если я ищу 2 номера с использованием A или 3 номера с использованием D в качестве отдельных запросов, результатом должен быть отель A с соответствующими идентификаторами номеров.
Проблема в том, что если я ищу 2 номера с использованием A и 3 номера с использованием D, одновременно возвращается и отель A, поскольку он не считает, что некоторые номера могут быть использованы как А и Д.
Номера должны быть уникальными / всего 5 /. Текущий пример не должен возвращать результат, потому что в отеле всего 4 номера.