MySQL查询来检索按过滤器(属性)分类的产品

点头

我在不使用几个子查询的情况下为以下情况构造查询时遇到问题。

产品按颜色,尺寸等一些过滤器进行分类。颜色是一个过滤器组,其中包含实际的颜色:绿色,红色,蓝色等。

见图片: http://s27.postimg.org/9zjvj2dur/mysql_stack2.jpg


就像写在图像上一样,是否可以在不使用子查询的情况下检索例如蓝色或绿色以及L大小的产品?

我想出的是每个过滤器组的子查询,但这似乎效率很低:

SELECT * FROM myTable 
# colors subquery
WHERE productid IN (SELECT productid FROM myTable 
      WHERE filterid = 1 OR filterid = 2) 
# sizes subquery
AND productid IN (SELECT productid FROM myTable 
      WHERE filterid = 3);

(filterid具有唯一的ID号)

术语

你可以这样

SELECT productid
  FROM table1
 WHERE filterid IN(1, 2, 3)
 GROUP BY productid
HAVING MAX(filterid IN(1, 2)) = 1
   AND MAX(filterid = 3) = 1

样本输出:

| PRODUCTID |
| ----------- |
| 2 |

如果您需要返回此类产品的所有列,则只需返回表即可

SELECT *
  FROM
(
  SELECT productid
    FROM table1
   WHERE filterid IN(1, 2, 3)
   GROUP BY productid
  HAVING MAX(filterid IN(1, 2)) = 1
     AND MAX(filterid = 3) = 1
) q JOIN table1 p
    ON q.productid = p.productid;

样本输出:

| PRODUCTID | FILTERGROUPID | FILTERID |
| ----------- | --------------- | ---------- |
| 2 | 1 | 2 |
| 2 | 2 | 3 |
| 2 | 3 | 6 |

这是SQLFiddle演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL过滤器查询?

来自分类Dev

MySQL过滤器查询

来自分类Dev

如何检索原始的过滤器查询

来自分类Dev

过滤查询-检索每个过滤器过滤的文档数

来自分类Dev

按创建日期分类的 Cumulocity Inventory API 过滤器

来自分类Dev

如何在MySQL中查询产品和过滤器之间的多对多关系?

来自分类Dev

Laravel MySQL 使用 eloquent 应用产品过滤器(正确的查询是什么?)

来自分类Dev

从过滤器中选择的MYSQL查询

来自分类Dev

使过滤器产品特定

来自分类Dev

产品过滤器

来自分类Dev

Firestore查询多个过滤器以在本机中检索集合

来自分类Dev

MySQL获取具有多个过滤器值的产品

来自分类Dev

如何使用Hibernate,HSQL按日期查询过滤器

来自分类Dev

django-按用户运行查询过滤器

来自分类Dev

ElasticSearch条件过滤器按类型查询

来自分类Dev

如何在SQL查询中按过滤器计数?

来自分类Dev

根据MySQL中的过滤器检索每个id的计数

来自分类Dev

EF按属性/类型做预过滤器表

来自分类Dev

jersey / jackson-基于查询参数的过滤器属性

来自分类Dev

基于列表属性的领域Swift过滤器查询

来自分类Dev

MongoDB查询过滤器

来自分类Dev

OData过滤器查询

来自分类Dev

查询过滤器权限

来自分类Dev

MDX 查询过滤器

来自分类Dev

SCCM 查询过滤器

来自分类Dev

带可选过滤器的MySQL查询

来自分类Dev

连接和过滤器的MySQL查询问题

来自分类Dev

MySQL查询来自多个表的搜索过滤器

来自分类Dev

MySQL查询来自多个表的搜索过滤器