2015-07-15 2 views
0

У меня есть некоторые MySQL таблицы, как показано ниже,выберите записи запроса, если несколько тип соответствует

1) видео

id  name 
1  test1 
2  test2 

2) теги

id  name 
1  theme1=test1 
2  theme1=test2 
3  theme2=test1 
4  theme2=test2 
5  age=senior 
6  age=children 

3) tags_to_items

vid tagid 
1  1 
1  5 

Здесь в таблице tags_to_item вы видите videos.id=1 имеет 2 метки 1)theme1=test1 И 2)age=senior. Это означает, что video.id=1 имеет 2 тега. Теперь вот один конфликт, что я делаю сейчас, я ищу только тему. Это означает, что если я ищу, где theme1 = theme1, тогда нужно также искать тему1 в теме2 и наоборот. как этот

WHERE tagid=1 OR tagid=2 

Это функционирует собственно, но теперь я хочу, чтобы искать, если видео есть несколько тег и его состояние, как этот

WHERE tagid=5 AND tagid IN (1,2) 

Она должна возвращать video.id=1

Таким образом, вероятно, это нужно для поиска, где видео 1 содержит тег тега age=senior И theme1=theme1 ИЛИ theme2=theme1. Но его не работает, у кого-нибудь есть идея, как я могу это сделать?

ответ

0

Я думаю, что получил ответ. Мне нужно сделать так, как это,

INNER JOIN tags_to_items t2  ON (v.id = t2.tagid AND t2.tagid = 5) 

INNER JOIN tags_to_items t3  ON (v.id = t3.tagid AND t3.tagid in ('27' ,'69','84' ,'99')) 
+0

Вы уверены, что присоединились к знаку viedeo, равному теги? Кроме того, я не думаю, что вам нужно сделать 2 внутренних соединения. И ваш «теги» отличается от вашего примера. Пожалуйста, еще раз взгляните на первый блок кода моего ответа. – bish

+0

Данные @bish - это просто образец, у меня есть большая база данных со многими тегами и многими фильтрами, поэтому объединения динамически соответствуют поиску тегов. это будет 2 или 3 или много. – hemsbhardiya

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