2013-05-09 2 views
0

다른 두 데이터베이스 간의 링크로 작동하는 데이터베이스 테이블이 있다고 가정합니다. 이 경우 책과 태그 사이의 링크 (예 : '허구'또는 '원예'). 우리는 다음과 같은 데이터 세트가있는 경우 :MySQL 쿼리 : 태그로 검색 결과 필터링

Book_id | tag_id 
---------------- 
1  | 13 
1  | 43 
1  | 15 
2  | 13 
2  | 25 

쿼리 어떤 종류의 말을 실행하는 것 "을 단지 태그 (13), (43)와 링크가 책, 15 찾기"를? 즉, 태그를 많이 추가할수록 표시된 책 수가 줄어 듭니다.

나는 그것이 의미가 있기를 바랍니다. 사전에 시간과 도움을 주셔서 감사합니다 !!

답변

1

시험해보십시오.

SELECT 
    Book_id 
FROM 
    book_tags 
GROUP BY 
    Book_id 
HAVING 
    SUM(CASE WHEN tag_id IN (13, 43, 15) THEN 1 END) >= 3 

태그가 13, 43, 15 (모두) 인 서적 만 필요하면 결과로 book_id = 1을 반환합니다. SUM() >= 3은 즉 13, 43, 15

SQLFIDDLE

+0

이 아름답게 일,이 경우 그 3 당신이 찾고있는 태그의 총 수를 지정합니다! 엄청 고마워! – JamieHoward

+0

도움이 되니 기쁩니다. :) – Akash

0

이 같은 ... 제대로 질문을 이해한다면 :

SELECT `Book_id` FROM `table` WHERE `tag_id` IN (13,43,25) LIMIT 0, 10; 
0

는이 같은 시도 할 수 있습니다 : 당신이 당신의 책을 별도의 테이블이있는 경우

select book_table.* from book_table, link_table where book_table.id = link_table.book_id and link_table.tag_id in (13, 43, 15) 

을 ..