2013-07-01 2 views
0

테이블 tags_blogs에 일치하는 tag_id의 블로그와 일치하는 쿼리를 만들어야합니다. 이 단계에서 걱정하지 않는 실제 태그가 포함 된 다른 테이블이 있습니다. blog_id = 6mysql에서 일치하는 항목 수 계산

reference_id tag_id blog_id 
1    1  1 
2    2  1 
3    10  6 
4    11  6 
5    10  7 
6    11  7 
7    11  8 

그리고 (예를 들어)이 곳을 돌아 :

어떻게이 테이블의 내용을 않는 즉

blog_id total_matches 
7   2 
8   1 

매개 변수에 tag_id 일치 한 모든 블로그의 ID를 반환 제공된 경기 수 달성 횟수뿐 아니라 블로그가있는 경우

SELECT blog_id FROM tags_blogs WHERE blog_id = 6 
+0

좋아 I ve는 방금 지금까지의 답변이 여기에 요구되는 것을하지 않는다는 것을 깨달았습니다. - blog_id = 6은 6 인 blog_id 만 반환하지만 필요한 것은 6 이외의 블로그와 일치하는 태그의 수입니다. 유사한 블로그의 순서 목록 ... –

답변

1

같은 결과를 반환합니다. 이 특정 쿼리가 반드시 최적 않음을 유의

select tb.blog_id, count(*) 
    as total_matches 
    from tags_blogs tb 
    where tag_id in (select distinct tag_id from tags_blogs where blog_id = 6) 
    and blog_id != 6 
    group by blog_id 

Link to SQL Fiddle

당신이 만들 조금 더 어떤 상황에서 효율적으로, 또는 쉽게 찾을 수 있습니다 '

select tb.blog_id, count(*) 
    as total_matches 
    from tags_blogs tb 
    join tags_blogs tb1 on tb1.tag_id = tb.tag_id and tb1.blog_id != tb.blog_id 
    where tb1.blog_id = 6 
    group by tb.blog_id; 
+0

이것은 blog_id = 6에서 태그 수를 반환합니다. 여기에서 비슷한 블로그 목록을 생성하려고 시도합니다. 내가 얼마나 잘 일치하는지에 따라 주문할 수 있습니다. –

+0

다시 한번 감사드립니다 :) –

+0

왜 첫 번째 쿼리에서 뚜렷하게 나타 납니까? – zerkms

2

당신은 6의 모든 (또는 어떤 블로그 ID)를 선택하는 하위 쿼리가 필요 태그 :

는 (I 오전 해제 방법 지금까지) 내가 지금까지 가지고있는 코드입니다 tag id 해당 하위 쿼리에서 선택되면 동일한 blog_ids를 함께 그룹화하고 집계합니다.

SELECT 
    a.blog_id, 
    count(*) as total_matches 
FROM 
    tags_blogs as a 
WHERE 
    a.tag_id IN 
    (SELECT tag_id FROM tags_blogs WHERE b.blog_id=6) AND 
    a.blog_id!=6 
GROUP BY a.blog_id 

여기에 더 당신이 찾고있는 것 같다, 귀하의 의견에서

blog_id total_matches 
7   2 
8   2 
+0

J 이것이 작동하지 않는다는 것을 깨달았습니다. –

+0

어떻게 작동합니까? –

+0

@AmyNevill, group by tag_id 각 블로그에있는 태그의 수를 계산하려는 경우 –