Mam następujące tabele:
ROOM (id, name, property_id)
ATTRACTION (id, name, icon)
ROOM_PRICE (id, room_id, date_from, date_to, price) // wiele możliwych cenników dla pojedynczego pokoju!
PROPERTY (id, name)
PROPERTY_ATTRACTION(property_id, attraction_id)
Chce wyświetlić wszystkie pokoje z dowolnymi atrakcjami (np ID=1 i ID=9) oraz wybrać cennik dla danego pokoju. Wszystko w jednym zapytaniu.
Próbowałem poniższego zapytania:
SELECT r.id AS room_id, GROUP_CONCAT(DISTINCT CONCAT(a.name, '*', a.icon) ORDER BY a.name SEPARATOR '|') AS attractions, GROUP_CONCAT(DISTINCT CONCAT(rp.id, '*', rp.price) ORDER BY rp.id SEPARATOR '|') AS price_list FROM room r LEFT JOIN property p ON r.property_id=p.id LEFT JOIN property_attraction pa ON pa.property_id=p.id LEFT JOIN attraction a ON a.id=pa.attraction_id AND (a.is_active=1 OR a.is_active IS NULL) LEFT JOIN room_price rp ON rp.room_id=r.id WHERE pa.attraction_id IN(1,9) GROUP BY r.id HAVING count(pa.attraction_id)=2 ORDER BY p.is_promoted DESC LIMIT 0, 50
Ale rezulatatem jest lista błędnych pokojów (nie tych o wskazanych dwóch atrakcjach). Jak zbudować tutaj poprawne zapytanie?
Z góry dzięki za wszelką pomoc!