如何为一对多关系形成SQL查询?

时间:2010-11-26 05:54:39

标签: php sql mysql one-to-many yii

我有两个MySQL表:housefeatures。这是一个房地产网站。

house具有以下结构:

id | address | ... some other fields

features具有以下结构:

id | house_id | feature | value

你可以猜到,房子可以有多个特征,因此存在1:n的关系。

现在,我正在实施房屋搜索表单。我需要根据用户选择的功能过滤结果。

示例场景:获取所有具有garagegarden功能的房屋,以及这些房屋中的功能列表。

什么是最适合我需求的查询?我不熟悉JOIN操作,所以我需要你的帮助!

(可选)如果你能提供Yii Framework特定的解决方案,它会很棒:)

3 个答案:

答案 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对象以过滤用户选择的房屋。