如何形成一对一关系的SQL查询?
-
28-09-2019 - |
题
我有两个mysql表: house
和 features
. 。这是一个房地产网站。
house
具有这种结构:
id | address | ... some other fields
features
具有这种结构:
id | house_id | feature | value
您可以猜到,房屋可以具有多个功能,因此存在1:n关系。
现在,我正在为房屋实施搜索表。我需要根据用户选择的功能过滤结果。
样本场景:获取具有功能的所有房屋 garage
和 garden
, ,以及这些房屋中的功能清单。
最适合我需求的最佳查询是什么?我不熟悉加入操作,所以我需要您的帮助!
(可选)如果您可以提供特定于YII框架的解决方案,它将很棒:)
解决方案
SELECT *
FROM HOUSE H JOIN FEATURES F ON H.HOUSE_ID = F.HOUSE_ID
WHERE FEATURE IN ('GARDEN','GARAGE');
其他提示
如果你需要 只要 来自 房屋桌:
从iD中的房屋中选择 *(从功能中的功能中选择ID(“花园”,“车库”));
如果您需要全部详细信息:
从HOUSE H中选择 * H.house_id = f.house_id的功能F。
如果您使用YII,则无需手动加入它。
如果使用mySQL(超过sqlite),并且使用InnoDB表(在Myisam表上),则更容易。
您需要从功能(house_id列)到房屋(house_id列)创建外键
如果您使用GII构建模型,那么它将为您自动创建“关系”功能。
然后,在YII中,您将调用House->功能以获取一系列功能行。
您可以在fill()调用中传递CDBCRITERIA对象,以过滤用户选择的房屋。
不隶属于 StackOverflow