1

我得到了商品和过滤器之间的链接表,如下所示:id、good_id、filter_id。

当用户注释复选框时,我必须向他展示所有商品,这些商品与所有这些过滤器都有链接。

我对查询的看法是:(如果用户检查了过滤器:1,2 和 3)

SELECT DISTINCT(t0.gid) 
FROM links as t0, links as t1, links as t2 
WHERE t0.filter_id=1 AND 
      t1.good_id=t0.good_id AND t1.filter_id=2 AND 
      t2.good_id=t1.good_id AND t2.filter_id=3

但是这样一来,我们就会遇到麻烦,如果有很多已检查的过滤器..

那么,你将如何解决这个任务?

4

2 回答 2

0

如果您需要具有至少一个过滤器的 GID

SELECT DISTINCT `gid` FROM `links` WHERE `filter_id` IN (1,2,3)

如果您需要具有所有过滤器 1、2、3 的 GID

SELECT `gid` FROM `links` WHERE `filter_id` IN (1,2,3) 
GROUP BY `gid` HAVING COUNT( DISTINCT `filter_id`)=3  

其中COUNT( DISTINCTfilter_id)=3表示所有 3 个过滤器都已打开。

于 2013-05-07T08:13:10.697 回答
0
SELECT  gid
FROM    links
WHERE   filter_id IN (1, 2, 3)
GROUP BY
        gid
HAVING  COUNT(DISTINCT filter_id) = 3
于 2013-05-07T09:01:23.617 回答