2012-06-12 2 views
1

두 번째 테이블의 태그 정보를 사용하여 이미지 테이블을 필터링하는 방법을 이해하는 데 문제가 있습니다. 그래서간단한 MySQL 연결

나는 모든 기본적인 필드가있는 이미지 테이블이 있습니다

id | 
title | 
userid | 
timestamp | 
status 

을하고 난 태그 테이블이 : 내가하고 싶은 무엇

id | 
imageid | 
text (contains a single tag) 

은 간단하다 : 목록을을 를 선택하고 목록에있는 모든 태그가있는 이미지 목록을 가져옵니다. 나는 그저 내 머리를 감쌀 수 없다.

도움을 주시면 감사하겠습니다.

답변

2
SELECT 
    a.* 
FROM 
    images a 
INNER JOIN 
    tags b ON a.id = b.imageid 
WHERE 
    b.text IN ('tag1', 'tag2', 'tag3') 
GROUP BY 
    a.id 
HAVING 
    COUNT(*) = 3 

'tag1', 'tag2', 'tag3' :

그런 다음 HAVING 절을 사용하여이 카운트가 목록에 태그의 수와 일치하지 않는에 대한 항목 (전체 목록은보다 적은이있는 사람들을) 거부 절의 3은 태그 목록에있는 태그 수의 입력입니다.

0

당신은 당신이 검색 할 목록에 IN() 절에 태그를 제한, ID 당 태그를 계산하는 쿼리에 가입, 당신은 imageid 당 중복 된 태그가 없습니다 수 있습니다 가정.

SELECT 
images.* 
FROM 
    images 
    JOIN (
    SELECT 
    imageid, 
    COUNT(*) AS numtags 
    /* could also be COUNT(DISTINCT text) */ 
    FROM tags 
    /* Put only the tags you want into an IN() clause */ 
    WHERE text IN ('tag1,'tag2','tag3') 
    GROUP BY imageid 
    /* If an image has all 3 tags, COUNT(*) = 3 */ 
    HAVING numtags = 3 
) tlist ON images.id = tlist.imageid