2010-05-20 4 views
2

세 개의 테이블이 관련되어 있습니다.어떻게이 쿼리에 추가 선택을 추가 할 수 있습니까?

이미지 : id | 파일 이름 | 파일 크기 | ...

노드 : image_id | tag_id

태그 : id |

그리고 내가 X 태그

SELECT images.* FROM images 
INNER JOIN nodes ON images.id = nodes.image_id 
WHERE tag_id IN (SELECT tags.id FROM tags WHERE tags.tag IN ("tag1","tag2")) 
GROUP BY images.id HAVING COUNT(*)= 2 

문제를 내가 또한 검색된 이미지에 포함 된 모든 태그를 검색 할 필요가있다 포함 된 이미지를 검색하려면이 쿼리를 사용하고, 이름과 내가 같은 질문이 필요합니다 .

SELECT tag FROM nodes 
JOIN tags ON nodes.tag_id = tags.id 
WHERE image_id = images.id and nodes.private = images.private 
ORDER BY tag 

가 어떻게 하나 개의 쿼리가이 두 가지를 혼합 할 수 있습니다

이 실제 쿼리 느릅 나무 검색은 이미지에 포함 된 모든 태그를 검색?

이미지의 모든 이미지 테이블과 이미지의 태그가 필요합니다. 마찬가지로 : ID 파일 이름 파일 크기 태그 가능 CONCAT 태그입니다 어쩌면 경우

.

+0

결과 세트를 어떻게 보이게 할 수 있습니까? –

답변

1

아마도 이와 비슷한 것일 수 있습니까?

SELECT i.id, t.name 
FROM images i 
    INNER JOIN nodes n ON n.image_id = i.id 
    INNER JOIN tags t ON t.id = n.tag_id 
WHERE i.id IN 
(
    SELECT nodes.image_id 
    FROM nodes 
     INNER JOIN tags ON tags.id = nodes.tag_id 
    WHERE tags.name IN ('tag1', 'tag2') 
) 
+0

그러면 혼합 된 모든 태그가 반환됩니다. /는 해당 x 이미지가 아닙니다. –

+0

SQL의 쿼리 문당 하나의 결과 집합 만 가져올 수 있습니다. 이 예제에서는 이미지 및 태그가 (이미지 ID, 태그 이름) 쌍으로 포함 된 단일 결과 집합을 제공합니다. 이러한 쌍을 나열하고 클라이언트 코드에서 필요한 그룹을 수행하는 것은 그리 어렵지 않습니다. 이미지마다 별도의 결과 세트가 필요하면 SQL에서 커서를 사용하거나 클라이언트 코드에서 루프를 사용하여 여러 개의 쿼리 (각 이미지 ID마다 하나씩)를 실행해야합니다. –

0

그리고?

SELECT tag FROM nodes 
JOIN tags ON nodes.tag_id = tags.id 
WHERE image_id = images.id 
AND nodes.private = images.private 
AND image_id in (
    SELECT images.id FROM images 
    INNER JOIN nodes ON images.id = nodes.image_id 
    WHERE tag_id IN (SELECT tags.id FROM tags WHERE tags.tag IN ("tag1","tag2")) 
    GROUP BY images.id HAVING COUNT(*)= 2) 
ORDER BY tag 
관련 문제