База данных Artist-Tag: Получение тегов - PullRequest
1 голос
/ 16 декабря 2009

Я создаю базу данных, которая будет содержать разных исполнителей, которые могут быть помечены несколькими тегами. Это стандартное отношение многие-к-моему, и моя база данных выглядит так:

artist:  
 ID
 name  

tag:
 ID
 name

tagID:
 tagID
 artistID

Скажем, у меня есть два tagID, X и Y. Что я хочу сделать, это найти все теги, которые имеют общего исполнителя с тегами X и Y. Как мне это сделать?

В конечном счете, я хочу, чтобы это превратилось в интерфейс, который позволит вам найти исполнителя, помеченного произвольным набором тегов. Чтобы упростить процесс, я хочу отфильтровать комбинации тегов, которые не дадут никакого результата.

Ответы [ 2 ]

1 голос
/ 16 декабря 2009
SELECT T.tagID
  FROM tagID T
  WHERE T.artistID IN (SELECT T1.artistID
                          FROM tagID T1,
                               tagID T2,
                          WHERE T1.tagID = X AND
                                T2.artistID = T1.artistID AND
                                T2.tagID = Y)

Делись и наслаждайся.

0 голосов
/ 16 декабря 2009

В этом решении используется оператор набора INTERSECT для идентификации записей TagID для исполнителей, имеющих теги X и Y. Если вы работаете с базой данных, которая не поддерживает этот оператор набора, вам придется использовать вместо этого нормальное соединение.

select distinct tagid
from   tagid 
where tagid not in ('X', 'Y')
where artistid in 
        ( select artistid
          from tagid 
          where tagid = 'X'
        intersect
        select artistid
          from tagid 
          where tagid = 'Y' )
/
...