2013-07-28 2 views
0

내가이 개 사용됩니다 테이블이이 MYSQL 쿼리 : 뉴스 및 태그이 개 테이블

뉴스의 표는 음악 테이블에 관련된 music_id 필드가 있고 태그 테이블이 같은 aswell 등이있다을 tag_id 열. 각 아티스트마다 여러 개의 태그 항목이 있습니다. 이

music_id | tag_id | user_id 
    3  2   7 
    3  3   12 
    9  17  52 

그래서 각 사용자가 서로 다른 여러 개의 태그와 예술가 태그를 추가 할 수 있습니다 같은

태그 보인다.

각 뉴스 게시물 (news.music_id)에서 music_id를 가져 와서 모든 행의 각 아티스트의 상단 태그를 찾고 싶습니다. 내가 가장 인기가 태그를 주문하려는 그 후

music_id | top_tag 
    22   6 
    15   4 
    13   9 
    22   6 
    15   4 

처럼

는 그래서 일 것이다.

그래서이 말이

count | top_tag 
    2  6 
    2  4 
    1  9 

희망과 같은 결과 왼쪽 있어요. 나는 정말로 붙어있다!

+0

여기서 태그는 테이블이고 세 번째 테이블은 무엇입니까? –

+0

모든 행에있는 각 아티스트의 top_tag를 찾고 싶다고 가정 해 보겠습니다. 어떤 것이 최상위 태그인지 어떻게 결정할 것입니까? 인기에 따라 top_tags를 주문하려고한다고합니다. 어떻게 인기를 정의하고 있습니까? 이 분야를 명확하게 설명해 주시겠습니까? – dseibert

+0

죄송합니다. 설명하는 데 어려움이 있습니다. 태그 테이블에는 각 아티스트마다 여러 개의 태그가 있습니다. 간단한 예가 내 첫 번째 코드 스 니펫에 있습니다. 각 아티스트는 무제한의 다른 태그뿐만 아니라 동일한 태그의 배수로 태그 할 수 있습니다. 내가 원하는 것은 music.id를 뉴스 테이블에서 가져와 해당 음악에 가장 많이 사용되는 태그를 찾는 것입니다 .id. 가장 인기있는 태그는 music_id 옆에 항목이 가장 많은 태그입니다. 그러면 뉴스 테이블의 각 게시물에는 아티스트에게 가장 인기있는 태그가 포함 된 열이 있습니다. –

답변

0

나는 "음악 ID에서 가장 인기있는 태그 인 음악 ID 수에 따라 태그를 주문하십시오"라고 해석합니다. 다음 쿼리는 하위 쿼리를 사용하여 각각의 music_id에있는 태그 수를 계산합니다. 또한 최종 집계에 대한 각 'music_id'의 최대 개수를 찾습니다.

select mt.tag_id, count(*) as musiccnt 
from (select music_id, tag_id, count(*) as cnt 
     from tags t 
     group by music_id 
    ) mt join 
    (select music_id, max(cnt) as maxcnt 
     from (select music_id, tag_id, count(*) as cnt 
      from tags t 
      group by music_id 
      ) mt 
     group by music_id 
    ) m 
    on mt.music_id = m.music_id and mt.cnt = m.maxcnt 
group by mt.tag_id 
order by musiccnt desc