Mysql查询检索由多个过滤器(属性)分类的产品

时间:2013-12-22 03:47:01

标签: mysql sql database

我在构建以下场景的查询时遇到问题,而不使用多个子查询。

产品按颜色,大小等过滤器分类。颜色是一个过滤器组,包含实际颜色的过滤器:绿色,红色,蓝色,..

见图片: 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号)

1 个答案:

答案 0 :(得分:2)

你可以这样做

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 演示