Peter Nack: Probleme mit erweitertem Szenario

Beitrag lesen

Hallo,

anhand der bisherigen Ratschlaege konnte ich das Problem des von mir initial beschriebenen Falles loesen, doch stehe ich nun leider wieder vor einem Problem, an dem ich nicht weiter komme.

Und zwar ist die Situation wie folgt - vergessen wir mal mein bisheriges Beispiel:

Die Datenstruktur ist wie folgt aufgebaut:

  • Resort
      - n ResortFacilites
      - n Rooms
        - n RoomFacilities

Der Benutzer kann die Filteroptionen setzen fuer
a) die Facilities eines Resorts und
b) die Facilities des Rooms einse Resorts

Anwendungsfall:
Ich moechte alle Resorts mit "Loundry Service" und "Car Rental" (resort_facilities), sowie nur Zimmer, welche "Klimaanlage" und "Internet" besitzen (room_facilities).

Lassen wir die RoomFacilities einmal aussen vor, so funktioniert folgendes (vereinfachtes) Statement fuer die ResortFacilities:

  
SELECT DISTINCT SQL_CALC_FOUND_ROWS  
	resort.id, resort.name, resort.location_id	  
FROM  
	resort 	  
LEFT JOIN  
	mm_resort_facility ON resort.id = mm_resort_facility.resort_id  
LEFT JOIN  
	resort_facility ON mm_resort_facility.resort_facility_id = resort_facility.id  
-- LEFT JOIN  
    -- room ON resort.id = room.resort_id  
--  -- LEFT JOIN  
	-- -- mm_room_facility ON room.id = mm_room_facility.room_id  
-- -- LEFT JOIN  
	-- -- room_facility ON mm_room_facility.room_facility_id = resort_facility.id  
WHERE  
	( resort_facility.id=1 OR resort_facility.id=2 OR resort_facility.id=3 )  
GROUP BY  
	resort.id  
HAVING  
	COUNT(mm_resort_facility.resort_facility_id) = 3  
ORDER BY  
	votes_overall  
DESC  LIMIT 0, 4  

== Problem 1 ==
Kommentiere ich hingegen jedoch die durch "--" auskommentierten Zeilen wieder ein (nicht die doppelt auskommentierten), so bekomme ich ein falsches Ergebnis (falsch heisst in diesem Kontext, dass nicht alle Resorts korrekt zurueckgegeben werden).

== Problem 2 (Ausbaustufe) ==
Nun kommen die RoomFacilties noch zusaetzlich mit ins Spiel.
Und an dieser Stelle stehe ich derzeit vor einem riesigen Fragezeichen.
Denn an dieser Stelle geht ja das ganze GroupBy und Having-Handling in die Knie. Und der JOIN (unter Problem 1 beschrieben) scheitert ja auch schon.

Was fuer Moeglichkeiten habe ich, meine Anforderungen in einem einzigen Statement unterzubringen?
Gibt es da eine schicke und auch performante Loesung

MfG
Peter, der sehr dankbar waere, wenn einer der SQL-Experten mir hier einen Tip geben koennte.

PS: Ich kann auch gerne noch einen Datenbank-Dump liefern.