我有两个MySQL表:house
和features
。这是一个房地产网站。
house
具有以下结构:
id | address | ... some other fields
features
具有以下结构:
id | house_id | feature | value
你可以猜到,房子可以有多个特征,因此存在1:n的关系。
现在,我正在实施房屋搜索表单。我需要根据用户选择的功能过滤结果。
示例场景:获取所有具有garage
和garden
功能的房屋,以及这些房屋中的功能列表。
什么是最适合我需求的查询?我不熟悉JOIN操作,所以我需要你的帮助!
(可选)如果你能提供Yii Framework特定的解决方案,它会很棒:)
答案 0 :(得分:0)
SELECT *
FROM HOUSE H JOIN FEATURES F ON H.HOUSE_ID = F.HOUSE_ID
WHERE FEATURE IN ('GARDEN','GARAGE');
答案 1 :(得分:0)
如果您需要只有 众议院表中的列:
来自HOUSE的SELECT *,其中ID为(来自FEATURES的SELECT ID,其中FEATURE IN('GARDEN','GARAGE'));
如果您需要完整的详细信息:
SELECT * 来自HOUSE H JOIN FEATURES F ON H.HOUSE_ID = F.HOUSE_ID 在哪里有特色('花园','车库');
答案 2 :(得分:0)
如果您使用Yii,则无需手动加入。
如果您使用MySQL(通过SQLite)并且使用InnoDB表(通过MyISAM表),则会更容易。
您需要从功能(house_id列)到Houses(house_id列)创建外键
如果使用Gii构建模型,则会自动为您创建“关系”功能。
然后在Yii中,您可以调用House->功能来获取一系列要素行。
您可以在Fill()调用中传递CDbCriteria对象以过滤用户选择的房屋。