Как MySQL между несколькими предложениями Where - PullRequest
0 голосов
/ 09 мая 2020

Я хочу отображать продукты с ценой от 10k до 30k с category_id = 1 или category_id = 2.

это мой запрос

SELECT * FROM products
WHERE price BETWEEN 10000 AND 30000
AND
category_id = '2' OR category_id = '3'
ORDER BY name ASC, price ASC

, но я получаю весь продукт в в этой категории и не получить товар с ценой от 10k до 30k

Ответы [ 4 ]

2 голосов
/ 09 мая 2020

Принудительное использование logi c с подходящим брекетингом

SELECT * FROM products
WHERE price BETWEEN 10000 AND 30000
AND
(category_id = '2' OR category_id = '3')
ORDER BY name ASC, price ASC
2 голосов
/ 09 мая 2020

Ваш предикат OR должен находиться в круглых скобках:

SELECT * FROM products
WHERE price BETWEEN 10000 AND 30000
AND (category_id = '1' OR category_id = '2')
ORDER BY name ASC, price ASC

В качестве альтернативы вы можете использовать IN:

SELECT * FROM products
WHERE price BETWEEN 10000 AND 30000
AND category_id IN ('1', '2')
ORDER BY name ASC, price ASC
1 голос
/ 09 мая 2020

Чтобы понять, почему это происходит, вам нужно знать о приоритете оператора . Возможно, вы помните из школы (я почти не помню), что умножение и деление оцениваются перед сложением - здесь та же концепция. заставить операторы оцениваться в том порядке, в котором вы хотите.

1 голос
/ 09 мая 2020

вам также нужно подумать о вашем порядке действий на этом, вы хотите это

WHERE (price BETWEEN 10000 AND 30000)
AND
(category_id = '2' OR category_id = '3')
...