Wie eine SQL-Abfrage für eine zu viele Beziehung bilden?
-
28-09-2019 - |
Frage
Ich habe zwei MySQL-Tabellen: house
und features
. Dies ist für eine Immobilien-Website.
house
Diese Struktur hat:
id | address | ... some other fields
features
Diese Struktur hat:
id | house_id | feature | value
, wie Sie sich vorstellen können, ein Haus kann mehrere Funktionen haben, so dass eine 1: n. Beziehung existiert
Nun, ich für Häuser ein Suchformular implementieren. Ich brauche die Ergebnisse zu filtern, basierend auf den vom Benutzer ausgewählten Funktionen.
Beispielszenario: alle Häuser erhalten, die die Merkmale garage
und garden
haben, und eine Liste der Features in den Häusern
Was wäre die beste Abfrage um meine Bedürfnisse anzupassen? Ich bin nicht vertraut mit Operationen JOIN, so ich brauche deine Hilfe!
(optional) Wenn Sie eine Yii-Framework spezifische Lösung anbieten können, wäre es genial:)
Lösung
SELECT *
FROM HOUSE H JOIN FEATURES F ON H.HOUSE_ID = F.HOUSE_ID
WHERE FEATURE IN ('GARDEN','GARAGE');
Andere Tipps
Wenn Sie nur die Spalten aus der Haus Tabelle :
SELECT * FROM Haus, in dem ID in (SELECT-ID aus Merkmalen in dem Merkmale ( 'Garten', 'Garage'));
Wenn Sie die gesamten Details benötigen:
SELECT * Von Haus H JOIN CHARAKTERISTIKEN F ON H.HOUSE_ID = F.HOUSE_ID WO FEATURE IN ( 'Garten', 'Garage');
Sie müssen nicht manuell beitreten, wenn Sie Yü verwenden.
Es ist einfacher, wenn Sie MySQL verwenden (über SQLite) und wenn Sie InnoDB-Tabellen verwenden (über MyISAM-Tabellen).
Sie benötigen einen Fremdschlüssel aus Merkmalen (house_id Spalte) zu Häusern (house_id Spalt)
erstellenWenn Sie Ihr Modell mit Gii bauen, dann wird es die „Beziehung“ -Funktion automatisch für Sie erstellen.
Dann in Yü, würden Sie House- nennen> verfügt über eine Reihe von Feature-Zeilen zu erhalten.
Sie können ein CDbCriteria Objekt im Fill () Aufruf übergeben, die Häuser zu filtern, dass der Benutzer ausgewählt.