2016-04-05 3 views
0

Итак, у меня есть база данных с 3 таблицы с соответствующими столбцами:Mysql Movie/Метки выберите запрос

  1. теги: TID, TAG_NAME
  2. фильмы: MID, MOVIE_TITLE
  3. tags_to_movies: movie_ID, tag_id

Как выбрать фильмы, имеющие хотя бы те теги, которые я хочу.

Итак, если у меня есть movie1 с тегами (1,2,3) и movie2 с (1,4), когда я выбираю TID 1, я получаю в результате movie1 и movie2, но когда я запрашиваю TID (1,2) Я получаю только фильм1.

Я уже немного огляделся по Сети, и я не думаю, что нашел решение (или не пробовал достаточно сильно).

+0

Возможно, потому, что ваше предложение where равно tid = 1 и tid = 2, что будет только для фильма 1. Попробуйте выбрать movie_title из фильмов m, тегов t, tags_to_movies c где m.mid = c.movie_id и c.tag_id в (мой список выбора здесь - как «c.tag_id в (1, 2)») –

ответ

0
select m.MID, m.movie_title 
from movies m 
join tags_to_movies tm on tm.movie_id = m.mid 
join tags t on tm.tag_id = t.tid 
where t.tid in (1,4) 
group by m.MID, m.movie_title 
having count(distinct t.tid) = 2 

having count(distinct t.tid) = 2 зависит от количества имеющихся у вас тегов. Для 3-х тегов используется having count(distinct t.tid) = 3.

+0

У меня было что-то немного другое, используя GROUP BY и HAVING, но это хорошо работает. Большое спасибо. –

Смежные вопросы