radhab20
@radhab20
Мир вам!

Как сгрупировать несколько where в запросе sql?

Здравствуйте, друзья.

Делаю фильтр для вывода материалов на сайте. У каждого материала есть категория и подкатегория. В базе просто поля cat и podcat. Нужно сделать множественную выборку, например, чтобы пользователь указал категорию, и несколько подкатегорий. За раз может указать несколько таких категорий и подкатегорий, вручную добавляя строки для фильтра, нажимая на плюсик. Может просто выбрать категорию без подкатегорий, тогда выводятся все.

Как сгрупировать несколько WHERE, чтобы выборка была корректной? Просто указать несколько AND не получается, так как подкатегории могут быть одинаковыми, в разных категориях.

Думаю использовать отдельный запрос для каждой категории, но есть наверно более элегантное решение.

SELECT * FROM materials WHERE cat=1 AND podcat=10 AND cat=2 AND podcat=11


5f033602011c7859131230.jpeg
  • Вопрос задан
  • 7478 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Это делается через OR, а так же используйте скобки чтобы логически разделить выражения
SELECT * FROM materials 
WHERE 
    ( cat=1 AND podcat=10 ) /* podcat 10 в cat 1 */
   OR ( cat=2 AND podcat=11 ) /* или podcat 11 в cat 2 */
   OR ( cat = 3 AND podcat IN(13,111) ) /* или podcat 13, 111 в cat 3 */


Если все materials всегда разложены по подкатегориям, то есть им присвоен уникальный podcat, тогда выборку можно делать только по podcat полю

SELECT * FROM materials 
WHERE podcat IN(10, 11, 13, 111)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы