SQL查询根据条件选择记录?

时间:2012-07-23 11:47:58

标签: mysql sql

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

例如,条件将以复选框中的数组形式发布:

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

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

2 个答案:

答案 0 :(得分: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(*)

答案 1 :(得分:0)

如果propertiesfeatures表由feature_id表格中的properties列连接到id表格中的features,那么我们可以做到这一点:

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;

希望这有帮助。