0

我有一点 SQL n00b 时刻。假设我有一个包含两个表的房地产网站:propertiesfeatures,以及一个连接它们的表。如果我有一个搜索表单,我如何构建我的查询以仅选择具有所有选定条件的属性?

例如,标准将通过复选框以数组的形式发布:

Array
(
    [features] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 5
        )
)

如何从我的记录中选择properties具有 ID 为 1、2 和 5(可能还有其他)的特征,但只有一个或两个属性不匹配的记录?

4

2 回答 2

3

您可以过滤连接表以查找感兴趣的功能,然后按属性分组并将结果集限制为仅包含所需记录数的组:

SELECT   properties.*
FROM     properties JOIN propfeatures USING (property_id)
WHERE    propfeatures.feature_id IN (1,2,5)
GROUP BY property_id
HAVING   COUNT(DISTINCT propfeatures.feature_id) = 3

当然,如果保证唯一性,您可以节省DISTINCT操作并简单地使用COUNT(*)

于 2012-07-23T11:51:18.993 回答
0

如果propertiesfeatures表通过表中的列连接feature_idpropertiesidfeatures,那么我们可以这样做:

SELECT a.* FROM `properties` AS a JOIN `features` AS b WHERE 
a.`feature_id`=b.`id` AND b.`id` IN (1,2,5) ORDER BY a.`feature_id` ASC;

希望这可以帮助。

于 2012-07-23T12:00:02.597 回答