2011-02-12 5 views
0

안녕하세요, 일부 MYSQL 조인에 대한 도움이 필요합니다. 조인 방법에 대해 잘 모르거나 MySQL에서 허용하는 경우.ID의 MySQL 다중 테이블 조인

일부 테이블 설정, post_controller, post_text, post_photo, post_link가 있습니다.

post_controller에는 모든 ID가 있으며 post_controller에 id 항목 (외래 키)이 없으면 post_text, post_photo, post_link 테이블에 항목을 가질 수 없습니다. 내가 다른 유형의 게시물을 가지고 있기 때문에 게시물의 유형에 상관없이 검색하고 싶었 기 때문에 마스터 테이블에서 ID를 사용하기 때문에이 aproach에갔습니다.

내가 알고 싶은 것은, 모든 테이블의 큰 배열을 형성하기 위해 3 개의 테이블을 마스터 테이블에 결합시키는 방법이다. 게시물 1에서 20까지를 원한다고 말할 수있다. 그렇게 각 테이블에서 게시물 유형.

 
post_text 

id content  title 
1 {sometext} {sometext} 
2 {sometext} {sometext} 
 

 
post_contoller 

id userid type time 
1  2  1  00:00 
2  4  1  00:00 
3  5  2  00:00 
4  23  2  00:00 
5  8  3  00:00 
 
 
post_photo 

id content  hash 
3 {sometext} {somehash} 
4 {sometext} {somehash} 
 
 
post_link 

id content  desc  link 
5 {sometext} {sometext} {somelink} 
 

엔드 데이터 집합을 결과.

 
post_photo 

id userid type time content  title  desc  link  hash 
1  2  1  00:00 {sometext} {sometext} 
2  4  1  00:00 {sometext} {sometext} 
3  5  2  00:00 {sometext} 
4  23  2  00:00 {sometext}         {somehash} 
5  8  3  00:00      {sometext}{somelink} 
 

post_controller의 마스터 ID를 기준으로 3 개의 테이블을 결합하여이 결과를 설정할 수 있습니까? 그렇다면 설명하십시오. 가능한 경우 다른 해결책을 제시하십시오.

감사합니다.

+0

당신이'UNION' 또는'LEFT JOIN' 체크 아웃 적이 있습니까? 이 중 하나는 어떤 형태로든 원하는 것을 얻을 수 있습니다. – jswolf19

답변

1

예, 그것은 가능하다 :

SELECT c.*, 
      IFNULL(IFNULL(p.content, t.content), l.content) AS content, 
      t.title, 
      l.desc, 
      l.link, 
      p.hash 
    FROM post_contoller c 
LEFT JOIN post_text t ON t.id = c.id 
LEFT JOIN post_photo p ON p.id = c.id 
LEFT JOIN post_link l ON l.id = c.id 
+0

유망 해 보입니다. 시도해보고 나에게 도움이되는지 확인해 보겠습니다. –

+0

SQL을 약간 수정하여 원하는 결과를 얻을 수있었습니다. –

+0

@Akay : 어떤 수정입니까? 구문 오류가 발생 했습니까? – zerkms