@fuck__all__humans

Как составить SQl запрос?

Ребята, хелп, копаюсь больше 3 часов в яндексе и гугле, так и ничего не нашел.
у меня есть таблица такого restaurants_category формата:

id | cat_id | restaurant_id
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 2
5 | 3 | 1
6 | 4 | 2
7 | 4 | 3

Мне нужно составить SQL запрос, который выбрал бы restaurant_id, который(-е) принадлежал(-и) сразу нескольким cat_id.
Например, я хочу выбрать restaurant_id, которые принадлежат сразу и cat_id = 1, и cat_id = 2, тогда restaurant_id будет равен 2. Если мне нужно выбрать restaurant_id, который принадлежит сразу и cat_id = 1, и cat_id = 2, и cat_id = 4, то restaurant_id также будет равен 2.

У меня есть вариант sql запроса:
SELECT 
  "A".restaurant_id
FROM 
  restaurants_category AS "A" 
  INNER JOIN 
  restaurants_category AS "B"
ON
  ("A".restaurant_id = "B".restaurant_id AND
  "A".cat_id = 1 AND 
  "B".cat_id = 2);

Но это только для двух категорий, а для выборки из 3х категорий придется добавлять еще 1 JOIN и так далее. Есть еще вариант
SELECT cat_id restaurant_id FROM restaurants_category WHERE cat_id = 1 AND cat_id = 2

А дальше перебирать и сортировать все с помощью PHP. В общем, очень надеюсь на вашу помощь!
  • Вопрос задан
  • 179 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Удалите из таблицы поле `id` и сделайте первичным ключом пару (`cat_id`, `restaurant_id`), ведь дублей таких пар быть не должно. Тогда запрос можно будет упростить
SELECT `restaurant_id`
  FROM `restaurants_category`
  WHERE `cat_id` IN (1, 2)
  GROUP BY `restaurant_id`
  HAVING COUNT(*) = 2
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Roman-Fov
Выбирает те, что имеют более одной категории.
Это??? Или я неправильно понял вопрос?
SELECT COUNT(*) AS `count`, `restaurant_id` FROM `restaurants_category` as `r` GROUP BY `restaurant_id` HAVING COUNT(*) > 1
Ответ написан
Ваш ответ на вопрос

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

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