2015-03-23 4 views
0

У меня есть 3 таблицы в базе данных MySQL, как следующийпользовательских присоединиться запрос, чтобы получить запись из 3 таблицы

таблица 1: видео

id name 
1  one 
2  two 
3  three 

Таблица 2: теги

id name 
1  stage=test 
2  age=under18 

таблица 3: tags_to_items где tags_id = tags.id и item_id = videos.id

tag_id item_id 
1   1 
2   2 
2   1 
1   3 

Здесь item_id 1 имеет 2 метки. Я хочу выбрать все записи из таблицы videos, где tag_id=1 и tag_id=2. Поэтому вывод должен быть video.id=1.

Пожалуйста, помогите мне сделать так, спасибо заранее.

ответ

0

Вы действительно не нуждаетесь ни в каких запросах от видео или не присоединяетесь. Просто делать то, что вам нужно до сих пор:

SELECT item_id as VIDEO_ID 
    SUM(CASE WHEN tag_id = 1 THEN 1 ELSE 0 END) as tag_1, 
    SUM(CASE WHEN tag_id = 2 THEN 1 ELSE 0 END) as tag_2 
FROM tags_to items 
WHERE tag_id = 1 or tag_id = 2 
GROUP BY VIDEO_ID 
HAVING tag_1>0 AND tag_2>0 
+0

я хочу, чтобы все данные из видео таблицы, поэтому я думаю, что нужно присоединиться и получить название видео на основе на item_id – hemsbhardiya

+0

, если вам нужно больше, чем 'id' исправить свой вопрос и написать все ваши требования вместе, пожалуйста, – Alex

+0

да, ваш ответ мне очень помогает. спасибо @Alex. – hemsbhardiya

0
SELECT * FROM videos WHERE id IN (SELECT item_id FROM tags_to_items WHERE tag_id IN (1,2)) 
+0

это не сработает, если предоставленные данные образца возвратят все 3 строки – Alex

+0

, если это то, что вы отправили в качестве требования **, я хочу выбрать все записи из таблицы видео, где tag_id = 1 и tag_id = 2 **. Затем указанный выше запрос будет работать на 100%. –

+0

именно он написал ** И **, поэтому только ** id = 1 ** имеет обе записи – Alex

0

Вы можете сделать так:

  SELECT t1.tag_id, t1.item_id, t2.name AS tagName, t3.name AS videoName FROM tags_to_items AS t1 

      LEFT JOIN tags AS t2 ON t1.tag_id=t2.id 

      LEFT JOIN videos AS t3 ON t1.item_id=t3.id 

      WHERE t1.tag_id IN (1,2) 
Смежные вопросы