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:)

War es hilfreich?

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)

erstellen

Wenn 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top