![](/img/trans.png)
[英]SQL: select records based on certain criteria, merging records that are duplicates
[英]SQL query to select records based on criteria?
我有点SQL n00b的时刻。 假设我有一个带有两个表的属性网站: properties
和features
,一个表将它们连接在一起。 如果我有搜索表单,如何构造查询以仅选择具有所有选定条件的属性?
例如,条件将从复选框中以数组的形式发布:
Array
(
[features] => Array
(
[0] => 1
[1] => 2
[2] => 5
)
)
如何从具有ID为1、2和5(可能还有其他)的特征的properties
中选择记录,但仅具有一个或两个ID的属性不匹配?
您可以过滤联接表以查找感兴趣的功能,然后按属性分组并将结果集限制为仅包含所需记录数的组:
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(*)
。
如果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;
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.