Question

J'ai deux tables MySQL: house et features. Ceci est un site immobilier.

house a cette structure:

id | address | ... some other fields

features a cette structure:

id | house_id | feature | value

comme vous pouvez le deviner, une maison peut avoir de multiples fonctionnalités, donc 1:. N relation existe

Maintenant, je suis en œuvre un formulaire de recherche pour les maisons. Je dois filtrer les résultats en fonction des caractéristiques sélectionnées par l'utilisateur.

Exemple de scénario: obtenir toutes les maisons qui ont les caractéristiques garage et garden, et une liste des caractéristiques de ces maisons

.

Quelle serait la meilleure question pour répondre à mes besoins? Je ne suis pas familier avec les opérations de jointure, donc je besoin de votre aide!

(EN OPTION) Si vous pouvez fournir une solution spécifique-cadre Yû, ce serait génial:)

Était-ce utile?

La solution

SELECT * 
FROM HOUSE H JOIN FEATURES F ON H.HOUSE_ID = F.HOUSE_ID
WHERE FEATURE IN ('GARDEN','GARAGE');

Autres conseils

Si vous avez besoin uniquement les colonnes de la table Maison :

SELECT * de maison où ID dans (ID SELECT de CARACTÉRISTIQUES où IN FEATURE ( 'garden', 'GARAGE'));

Si vous avez besoin de détails entiers:

SELECT * DE PRESTATIONS H JOIN F = ON H.HOUSE_ID F.HOUSE_ID OÙ EN FONCTION ( 'JARDIN', 'GARAGE');

Vous n'avez pas besoin de se joindre manuellement si vous utilisez Yii.

Il est plus facile si vous utilisez MySQL (sur SQLite) et si vous utilisez des tables InnoDB (sur les tables MyISAM).

Vous devez créer une clé étrangère de Caractéristiques (colonne house_id) à Maisons (colonne house_id)

Si vous construisez votre modèle à l'aide Gii, il va créer la fonction « relation » pour vous automatiquement.

Ensuite, dans Yii, vous appelleriez Maison-> propose d'obtenir un tableau de lignes de fonction.

Vous pouvez passer un objet CDbCriteria dans l'appel Fill () pour filtrer les maisons que l'utilisateur a sélectionné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top