Sorki za zamieszanie, nie o to mi chodziło. Oczywiście SQL podany przez nevt był dobry, do tamtych danych, ja go uszczegółowiłem - korzystając z tego co on napisał.
Co do długiego zapytania:
Tak jak już pisałem w PM zapytanie jest dość masakryczne, ale skoro wszystko jest potrzebne i taka jest konstrukcja tabel...
Lepiej dać kilka enterów do SQL'a, żeby było szybciej i prościej.
Nie będę analizował może całej struktury tabel, więc tylko ta zmiana w GROUP BY, jeśli nie będzie działało, to napisz jeszcze (bardzo możliwe, że może być coś jeszcze, nawet jak będzie dawało wyniki, to nie daję głowy, że o takie wyniki ci chodzi).
Pozatym, że nie wiem czy w ogóle mogą być 2x GROUP BY do jednego SELECT'a, to jeszcze był jeden problem taki, że `room_id` masz w kilku tabelach i nie podałeś, z której z nich to room_id było.
SELECT r.id AS room_id,
r.name AS room_name,
p.id AS property_id,
p.name AS property_name,
c.name AS city,
region.name AS region,
p.standard,
rg.file,
MIN(rp.price) AS min_price,
MAX(rp.price) AS max_price,
GROUP_CONCAT(
DISTINCT CONCAT(a.name, '*', a.icon)
ORDER BY a.name SEPARATOR '|'
) AS attractions,
r.description AS opis,
r.bedroom_number AS l_sypialni,
r.room_number AS l_pokoi,
GROUP_CONCAT(
DISTINCT CONCAT(t.name)
ORDER BY t.name SEPARATOR '|'
) AS typ
FROM room r
LEFT JOIN property p ON r.property_id=p.id
LEFT JOIN room_gallery rg ON rg.room_id=r.id
LEFT JOIN room_price rp ON rp.room_id=r.id
LEFT JOIN region ON p.region_id=region.id
LEFT JOIN city c ON p.city_id=c.id
LEFT JOIN property_attraction pa ON p.id=pa.property_id
LEFT JOIN attraction a ON pa.attraction_id=a.id AND (a.is_active=1 OR a.is_active IS NULL)
LEFT JOIN property_category pc ON p.id=pc.property_id
LEFT JOIN room_type rt ON rt.room_id=r.id
LEFT OUTER JOIN type t ON rt.type_id=t.id AND (t.is_active=1 OR t.is_active IS NULL)
WHERE pa.attraction_id IN(1,9)
GROUP BY r.id, pa.property_id
HAVING COUNT(attraction_id)=2
ORDER BY p.is_promoted DESC;