我正经历着一段 SQL n00b 时刻。假设我有一个房地产网站,有两个表:properties
和 features
,并有一个表将它们连接起来。如果我有一个搜索表单,如何构建查询以仅选择符合所有所选条件的属性?
例如,条件将以数组的形式从复选框中发布:
Array
(
[features] => Array
(
[0] => 1
[1] => 2
[2] => 5
)
)
如何从我的属性
中选择具有 ID 为 1、2 和 5(也可能是其他)的要素的记录,但只有一两个属性不匹配?
最佳答案
您可以过滤连接表以查找感兴趣的功能,然后按属性分组并将结果集限制为仅包含所需记录数的组:
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(*)
即可。
关于mysql - SQL查询根据条件选择记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611931/