2010-11-11 30 views
0

对此有一点概率,但我确定它很简单!mysql help - 写一个查询来显示多个类别中的产品,只要它们属于特定类别

我有一个产品ID与类别ID匹配的表,这些是表中唯一的两个字段。

我想查看卡片类别(ID = 100)中的所有产品是否在任何其他类别中,或者只有那一个。我尝试了一些东西,但不能查询出来。

SELECT products_id, count(categories_id) as cats_in FROM `products_to_categories` WHERE categories_id = 100 group by products_id 

这总是显示1的cats_in列,尽管我知道他们中的一些在多个类别,因为我已经检查。我知道我对分组和计数毫无用处,所以帮助理解这将非常棒!

回答

0

试试这个:

select distinct 
pc.cat_id 
from 
product_category pc 
inner join 
(
select prod_id from product_category where cat_id = 100 
) cards on cards.prod_id = pc.prod_id; 
+0

非常感谢,我添加了一个组,并选择了prod_id,这正是我需要的!我有很多需要了解的有关mysql的帮助! – 2010-11-11 13:06:33

+0

没问题 - 如果您对我的回答感到满意,可以接受它 - 谢谢:) – 2010-11-11 13:52:51

0

认为,这将有助于您:

select product_id, count(distinct category_id), category_id 
from products_to_categories 
group by product_id 
having category_id = 100 
    and count(distinct category_id) > 1; 
+0

这是更好的,但似乎并没有返回所有的人,它的发现只是其中的一些。谢谢你的回复:) – 2010-11-11 12:54:24

+0

如果你要提供表格和数据结构,我会再想一想。 =) – rMX 2010-11-11 13:03:18

+0

感谢您的提议,但我们现在有了答案。你可以休息! – 2010-11-11 13:16:09

0

典型的结构是这样的,似乎这反映了你有什么?

PRODUCTS 
id integer primary key 
productname varchar 


CATEGORIES 
id integer primary key 
categoryname varchar 


PRODUCTCATEGORIES 
id integer primary key 
productid integer 
categorid integer  
[unique index on (productid, categoryid) ... or you could make this dyad the primary key] 

你可以这样做:

select productid from PRODUCTCATEGORIES 
where categoryid <> 100 and productid in 
(
select productid from PRODUCTCATEGORIES 
where categoryid = 100 
) 

子查询发现产品的productids在100类外部查询发现那些还在其他类别产品的子集。

+0

非常感谢,这也很好!我想有很多方法可以解决问题,学习时很有帮助。再次感谢。 – 2010-11-11 13:10:08

相关问题