Mysql 选择属于两个不同类别的产品

Mysql 选择属于两个不同类别的产品,mysql,sql,select,group-by,in-operator,Mysql,Sql,Select,Group By,In Operator,这是表virtuemart\u产品\u类别: 我要做的是选择virtuemart_product_id,其中产品位于类别307和类别383中。 诸如此类: (我知道“AND”表达式是完全错误的,把它作为我想要实现的一个例子) 有没有一种sql方法可以实现这一点?也许我需要创建一个新表并以某种方式建立一种关系?我认为使用一些php和分离查询是一种非常蹩脚的方法,但即使它可以工作,它也将是一种非常复杂和糟糕的编码方式。 提前谢谢 编辑:同时添加products\u en\u gb表: 如果你想要一

这是表virtuemart\u产品\u类别:

我要做的是选择virtuemart_product_id,其中产品位于类别307和类别383中。 诸如此类: (我知道“AND”表达式是完全错误的,把它作为我想要实现的一个例子)

有没有一种sql方法可以实现这一点?也许我需要创建一个新表并以某种方式建立一种关系?我认为使用一些php和分离查询是一种非常蹩脚的方法,但即使它可以工作,它也将是一种非常复杂和糟糕的编码方式。 提前谢谢

编辑:同时添加products\u en\u gb表:


如果你想要一个产品分为两类,那么你可以加入UHU\u virtuemart\u products\u en\u gb,与它相对应,这样你就有两个类别栏。下面是一个简单的例子:

select p1.product_id from
product_category p1
inner join product_category p2 using(product_id)
where p1.category_id=307
and p2.category_id=383
解决此类问题的一种方法是问自己“结果行中必须出现什么内容使我能够过滤结果?”

这不是唯一的方法,但我认为这是一个相当简单的可视化方法。

试试这个:

SELECT * 
FROM uhhu_virtuemart_products_en_gb AS a 
WHERE a.virtuemart_category_id IN (307, 383)
GROUP BY a.virtuemart_product_id 
HAVING COUNT(1) = 2

您是否尝试过
而不是
?您有正确的查询表单,您只是在测试连接的同一侧。这里有“b.id=307和b.id=383”,这显然是不可能的,所以没有结果。只需将其中一个“b”更改为“a”:“其中a.id=307和b.id=383”产品只包含产品的id、名称、sku,而不包含类别id^1这很好,可以轻松扩展到更多类别。但是,如果不小心将同一个类别分配给一个产品两次,它可能会被破坏。好吧,这成功了!如果一个产品属于两个以上的类别,我应该通过php更改“HAVING COUNT(1)=x”值,每次都是这样,对吗?
SELECT * 
FROM uhhu_virtuemart_products_en_gb AS a 
WHERE a.virtuemart_category_id IN (307, 383)
GROUP BY a.virtuemart_product_id 
HAVING COUNT(1) = 2