2011-09-27 42 views
0

게시물, 태그 및 posts_tags라는 세 개의 테이블이 있다고 가정합니다. 게시물은 내 블로그에 모든 게시물을 저장하고 태그는 모든 다른 태그를 저장하며 posts_tags는 둘 사이의 관계를 저장합니다. 예를 들어, id 2 인 게시물이 id 3 태그로 태그 된 경우 posts_tags는이 관계를 저장합니다.MySQL에서 주어진 태그가있는 게시물에 대한 모든 태그를 선택하는 방법은 무엇입니까?

주어진 ID로 태그가 지정된 모든 게시물과 해당 게시물과 연결된 다른 태그를 얻을 수있는 쿼리를 만들고 싶습니다. 예를 들어, '프로그래밍'으로 태그가 지정된 모든 게시물과 해당 게시물과 관련된 모든 다른 태그를 하나의 쿼리에서 찾을 수 있기를 원합니다.

현재 두 가지 검색어를 사용하고 있습니다. 하나는 주어진 태그로 태그가 지정된 게시물을 찾고, 다른 하나는 게시물에 대한 모든 태그를 찾는 것입니다.

이러한 쿼리를 하나의 쿼리로 결합하는 방법이 있습니까?

답변

3

이 쿼리는 search_tag 태그가있는 모든 게시물과 쉼표로 구분 된 문자열로 표시된 기타 태그 (해당 검색에 포함되지 않은 태그)가 해당 게시물에 적용되는 모든 게시물을 반환합니다. 게시물의 내용이 이고 요청한 태그가 인 경우 목록에 표시되지만 "additional_tags"열은 NULL입니다.

SELECT posts.id, GROUP_CONCAT(post_tags.tag) AS additional_tags 
    FROM posts LEFT OUTER JOIN post_tags ON posts.id = post_tags.post_id 
    WHERE posts.id IN (SELECT post_id FROM post_tags WHERE tag = :search_tag) 
    AND post_tags.tag <> :search_tag 
    GROUP BY posts.id 
0

귀하의 "프로그램"ID가 1을 가정하고 u는이 질문의 첫 번째 부분에 응답 한

Select * from posts where tag_id in (select id from tag where id=1) 
+0

태그의 ID로 모든 게시물 싶어하고, tabdulla 이미 않는 쿼리를 가지고 그. 트릭은 단일 쿼리에서 두 부분에 모두 응답하는 것입니다. –

+0

@Larry 예 네가 맞았고 나를 알려 줘서 고마워. – Arasu

관련 문제