php mysql query不能使用多个“and”运算符

wtzytmuj  于 2021-06-21  发布在  Mysql
关注(0)|答案(4)|浏览(316)

这是我的查询,但不起作用

  1. SELECT p.pID
  2. FROM CommunityStoreProducts p
  3. JOIN CommunityStoreProductAttributeValues pav
  4. ON p.pID = pav.PID
  5. WHERE (
  6. (pav.akID = 62)
  7. AND (pav.avID = 12313)
  8. )
  9. AND (
  10. (pav.akID = 64)
  11. AND (pav.avID = 12315)
  12. )
  13. AND (
  14. (pav.akID = 65)
  15. AND (pav.avID = 12316)
  16. )

我也试着用这样的方式回答问题:

  1. SELECT p.pID FROM CommunityStoreProducts p INNER JOIN CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE (pav.akID = 62) AND (pav.avID = 12313)
  2. SELECT p.pID FROM CommunityStoreProducts p INNER JOIN CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE (pav.akID = 64) AND (pav.avID = 12315)
  3. SELECT p.pID FROM CommunityStoreProducts p INNER JOIN CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE (pav.akID = 65) AND (pav.avID = 12316)

所有3个查询都运行良好并返回值。当我们将这个3合并为1查询时,它不起作用。
仅供参考:1个产品满足所有3个条件
第一个问题有错吗?
谢谢。

xsuvu9jc

xsuvu9jc1#

  1. SELECT p.pID FROM CommunityStoreProducts p INNER JOIN
  2. CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE
  3. ((pav.akID = 62) AND (pav.avID = 12313))
  4. OR
  5. ((pav.akID = 64) AND (pav.avID = 12315))
  6. OR
  7. ((pav.akID = 65) AND (pav.avID = 12316))

无论何时对具有多个条件的同一字段执行操作,请使用或而不是and。

omjgkv6w

omjgkv6w2#

我正在处理一个非常复杂的产品过滤器,所以我不能使用“in”或“or”操作符。现在我把问题改成这样对我有用

  1. SELECT p.pID FROM CommunityStoreProducts p
  2. INNER JOIN CommunityStoreProductAttributeValues pav620 ON p.pID = pav620.PID
  3. INNER JOIN CommunityStoreProductAttributeValues pav640 ON p.pID = pav640.PID
  4. INNER JOIN CommunityStoreProductAttributeValues pav650 ON p.pID = pav650.PID
  5. WHERE ((pav620.akID = 62) AND (pav620.avID = 12313))
  6. AND ((pav640.akID = 64) AND (pav640.avID = 12315))
  7. AND ((pav650.akID = 65) AND (pav650.avID = 12316))

我不知道它是否正确,但它对我起了作用。谢谢你们的回复

ca1c2owp

ca1c2owp3#

如果必须使用多个“或”,可以用“in”条件替换它们。

ifmq2ha2

ifmq2ha24#

我没有看到关于这个查询的任何语法错误,但是它不会返回任何值。不可能有一个记录 akID 同时等于62、64和65。如果要返回所有此类记录,请使用 OR 操作员:

  1. SELECT p.pID FROM CommunityStoreProducts p
  2. INNER JOIN CommunityStoreProductAttributeValues pav
  3. ON p.pID = pav.PID
  4. WHERE pav.akID = 62 AND pav.avID = 12313
  5. OR pav.akID = 64 AND pav.avID = 12315
  6. OR pav.akID = 65 AND pav.avID = 12316

相关问题