嗨,我有一个小问题,我找不到解决方案。我在 MySql 中很新。

假设我有这个表:

 _______________
|prodID| |propID|
|________|______|
|   1    | 2    |
|   1    | 5    |
|   2    | 6    |
|   2    | 7    |
|   3    | 5    |
|   3    | 2    |
|   3    | 9    |
|   4    | 5    |
|   4    | 3    |
|   5    | 2    |
|   5    | 5    |
|________|______|

prodID 是产品 ID,propID 是属性 ID。
现在我想获取例如具有 propID=2 属性的产品
以及 propID=5 的属性。 propID=2 中的属性是“由玻璃制成”,propID=5 是“ child 安全”。我希望我得到的产品 (prodID) 都是。 “由玻璃制成,对 child 安全”。所以我得到的 propID 是 1,3 和 5。

这对我不起作用:
SELECT prodID FROM table WHERE propID=2 AND propID=5

我希望我的意思很清楚,希望有人能帮助我。

谢谢

编辑:

表现在在 prodID=4 处更改。
如果我尝试
SELECT prodID FROM table WHERE propID=2 OR propID=5

我会得到 1、3、4 和 5。但这不是我想要的。

最佳答案

您需要的查询是:

SELECT
  prodID
FROM
  t
WHERE
  propID IN (2,5)
GROUP BY
  prodID
HAVING
  COUNT(DISTINCT propID)=2

另外,请注意,它是“恰好 2 个属性”。如果结果中需要“属性中至少有 '2' 和 '5'”,则将 COUNT(DISTINCT propID)=2 更改为 COUNT(DISTINCT propID)>=2 。检查这个 fiddle

关于php - MySQL 查询中的 WHERE 和 AND,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24939887/

10-11 03:35