2013-01-09 2 views
0

각 태그에 대한 게시물 데이터베이스가 있습니다. 이 테이블의 이름은 각각 PostsTags입니다. 또한 두 테이블 간의 다 대다 관계를 유지하는 Posts_Tags이라는 세 번째 테이블이 있습니다.다 대 다 관계의 끝에서 데이터 선택

이렇게하려면 내 게시물과 내 태그 테이블 모두 id 열이 있어야합니다. 따라서 내 Posts_Tags 테이블에는 매핑을 저장할 postidtagid 열이 모두 있습니다.

예를 들어 제목에 "class"라는 단어가있는 모든 게시물을 쿼리하고 있습니다.

SELECT * FROM Posts WHERE title LIKE '%{class}%' 

그러나, 지금은 제목에 "클래스"가 아니라 모든 게시물을 조회 할뿐만 아니라, "자바"태그로 태그 :이 쿼리를 쉽게 할 수 있습니다.

SELECT id FROM Tags WHERE name='Java' 

가 그럼 난 이렇게 내 첫 번째 쿼리에 그 연결 수 : 내가 먼저 자바 태그의 ID를 얻을 두 개의 쿼리,이 작업을 수행 할 수 그러나

SELECT  Posts.* 
FROM  Posts 
INNER JOIN Posts_Tags 
     ON Posts.id=Posts_Tags.postid 
WHERE  Posts_Tags.tagid='$java_tag_id' 
      AND title LIKE '%{class}%' 

을, I 하나의 쿼리에서이 작업을 수행 할 수 있다는 것을 알고, 나는 방법을 모른다. 하나만 할 때 조인에 대해 많은 것을 생각해야하며 같은 쿼리에서 여러 조인을하면 머리가 회전합니다. 이 작업을 수행하기 위해 쿼리를 어떻게 구성해야합니까? 큰

답변

2
SELECT p.* 
     FROM Posts p 
     JOIN Posts_Tags pt 
     ON pt.postid = p.id 
     JOIN tags t 
     ON t.id = pt.tagid 
    WHERE t.tag='java' 
     AND p.title LIKE '%{class}%'; 
+0

, 감사합니다. 나는 이것이 조금 지나치게 생각하고 있다고 생각한다. 어쨌든, 이것은 완벽하게 작동합니다! –

0
SELECT 
    p.* 
FROM posts as p 
INNER JOIN Posts_Tags pt ON pt.post_id = p.id 
INNER JOIN Tags as t ON pt.tags_id = t.id 
WHERE t.tag='java' 
AND p.title LIKE '%keyword%'; 
관련 문제