PHP MySQL запрос не работает с несколькими операторами «И»

0

вот мой запрос, который не работает

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

и я также попытался погрузиться в запрос следующим образом:

SELECT p.pID FROM CommunityStoreProducts p INNER JOIN CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE (pav.akID = 62) AND (pav.avID = 12313)

SELECT p.pID FROM CommunityStoreProducts p INNER JOIN CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE (pav.akID = 64) AND (pav.avID = 12315)

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 запросу, который не работает.

FYI: 1 продукт, удовлетворяющий всем 3 условиям

есть ли какие-либо ошибки в первом запросе?

Благодарю.

  • 0
    какая ошибка отображается при запуске первого запроса?
  • 0
    Есть ли у вас продукты, которые удовлетворяют всем 3 условиям? в принципе это должно быть невозможно
Показать ещё 4 комментария
Теги:

4 ответа

3

Я не вижу никаких синтаксических ошибок в отношении этого запроса, однако он не вернет никакого значения. Не может быть записи, которая имеет akID равную 62, 64 и 65 одновременно. Если вы хотите вернуть все такие записи, используйте оператор OR:

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

Если вам нужно использовать несколько "ИЛИ", вы можете заменить их на "IN".

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

Всякий раз, когда вы выполняете операцию в одном поле с несколькими условиями, используйте OR вместо AND.

0

Я работаю с очень сложным фильтром продукта, поэтому я не могу использовать оператор "IN" или "OR". Теперь я изменил запрос как это, он работает для меня

SELECT p.pID FROM CommunityStoreProducts p 
INNER JOIN CommunityStoreProductAttributeValues pav620 ON p.pID = pav620.PID 
INNER JOIN CommunityStoreProductAttributeValues pav640 ON p.pID = pav640.PID
INNER JOIN CommunityStoreProductAttributeValues pav650 ON p.pID = pav650.PID
WHERE ((pav620.akID = 62) AND (pav620.avID = 12313))
AND ((pav640.akID = 64) AND (pav640.avID = 12315))
AND ((pav650.akID = 65) AND (pav650.avID = 12316))

я не знаю, правильно это или нет, но это сработало для меня. Спасибо, ребята, за ваш ответ

  • 0
    В вашем вступительном заявлении нет логики.
  • 0
    я знаю, но для моего требования я не могу использовать утверждение «ИЛИ». Здесь я ищу продукты, которые удовлетворяют всем 3 условиям. поэтому я присоединился к той же таблице с другим псевдонимом. это возможно по-другому?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню