我有一点SQL n00b时刻。假设我有一个包含两个表的属性网站:properties
和features
,以及一个连接它们的表。如果我有搜索表单,如何构建查询以仅选择所选条件全部的属性?
例如,条件将以复选框中的数组形式发布:
Array
(
[features] => Array
(
[0] => 1
[1] => 2
[2] => 5
)
)
如何从我的properties
中选择ID为1,2和5(可能还有其他)的功能的记录,但只有一个或两个的属性不匹配?
答案 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)
如果properties
和features
表由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;
希望这有帮助。