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.