2012-11-11 2 views
0

지금 약간의 시간을 보았습니다. 나는 UNION과 가짜 (하나는 왼쪽과 오른쪽 조인) 전체 조인을 시도했습니다. 나도 그렇게 SQL과 어쩌면 내가 솔루션을 발견했지만 제대로 할 수 없습니다.mysql에서 같지 않은 필드가있는 다중 테이블에 연결하기

이 예제에서는 세 개의 테이블이 있습니다 (시간이 많을수록).

post: 
---------------------------- 
| type | rel_id | id | 
---------------------------- 
| video |  2 | 51 | 
|----------------------------| 
| text |  1 | 50 | 
---------------------------- 

video: 
---------------------------- 
| id | video_url | title | 
---------------------------- 
| 2 |  ... | ... | 
|----------------------------| 
| 1 |  ... | ... | 
---------------------------- 

text: 
---------------- 
| id | contend | 
---------------- 
| 2 | ... | 
|----------------| 
| 1 | ... | 
---------------- 

게시 테이블이 주 테이블입니다. 유형 필드는 연결할 테이블을 표시합니다. rel_id 필드는 연결할 행을 지정합니다.

나는 다음과 같은 몇 가지 출력을 사용할 수

------------------------------------------ 
| id | type | video_url | title | contend | 
------------------------------------------ 
| 51 | video | ... | ... | NULL | 
|------------------------------------------| 
| 50 | text | NULL | NULL | ... | 
------------------------------------------ 

마지막 문제는 내가 모든 결과를 검색에 사용할 수 있도록 마지막 WHERE 절 필요가 없음을한다는 것입니다.

+1

을 만 "비디오"와 "텍스트"기록을해야합니까? – Marco

+0

테이블만큼이나 ... 이미지와 링크가 더 많습니다. 너무 복잡하게 만들고 싶지 않았습니다. 나는 그것을 이해할 필요가있다. –

답변

0

당신은 시도 할 수 : 오며 'Post 테이블에서

SELECT p.id AS id, p.type AS type, v.video_url AS video_url, 
     v.title AS title, NULL AS contend 
FROM post p INNER JOIN video v 
    ON p.rel_id = v.id AND p.type = 'video' 
UNION 
SELECT p.id, p.type, NULL, NULL, t.contend 
FROM post p INNER JOIN text t 
    ON p.rel_id = t.id AND p.type = 'text' 
+0

이 큰 ^^ 작동하지만 이름에 문제가 있습니다 : 내 출력이 ID \t video_url에 \t NULL –

+0

이름이 주장 \t 제목을 준다 거기 –

+0

@SazukariMono을 : 나는 당신의 출력이 표시되지 않습니다,하지만 당신은 할 수 당신이 원하는 이름을주기 위해 필드를 사용한 후에 – Marco

관련 문제