2009-08-23 5 views
1

나는 content_id와 colomn을 가지고있는 인덱스 테이블을 가지고있다.(예 : content_id = 1, type = audio. content_id = 1, type = video) 오른쪽 테이블 (contentvideo, contentaudio 테이블)의 content_id를 기반으로 올바른 데이터를 얻을 수 있습니까?MySQL 복수 선택

+0

당신은 가지고있는 테이블과 가지고있는 필드를 정확히 명확히 할 수 있습니까? –

+1

'polymorphic-associations' 태그를 추가했습니다. 왜냐하면 그렇게하는 것이기 때문입니다. 이 데이터베이스 디자인과 관련된 다른 질문을 보려면 태그를 따르십시오. –

답변

0
+1

내가 준 링크에서 MysSQL을 읽었습니다. 개념은 분명합니다. 예제는 좋지 않지만 일부 검색을 수행하고 케이스 제스처를 기반으로 필요한 것을 찾았습니다. 감사! 같은 일에 비틀 거리는 다른 사람들의 경우. 여기 내가 필요한 링크 (CASE 스위치를 기반으로 한 SELECT) http://forums.mysql.com/read.php?10245909245990#msg-245990 –

+0

음, 문제 없습니다! ;) –

1

난 당신이 하나의 SELECT 문을 통해 콘텐츠를 검색 할 걸릴? 콘텐츠 테이블의 레이아웃이 정확히 같은 경우는 UNION를 사용할 수 있습니다

SELECT ca.* FROM contentaudio ca, indextable it 
WHERE ca.content_id = it.content_id 
    AND it.content_type = 'audio' 
UNION 
SELECT cv.* FROM contentvideo cv, indextable it 
WHERE cv.content_id = it.content_id 
    AND it.content_type = 'video' 
ORDER BY content_id /* or whatever */ 

참고 content_idcontent 모든 테이블에서하지 고유 한 경우, 같은 위해 (다른 종류의) 여러 레코드를 얻을 수 있음 content_id. 또한 일부 indextable 키를 기반으로 특정 레코드를 선택하는 경우이를 유니언의 각 파트에 추가해야합니다. 당신의 content 테이블 다른 레이아웃이있는 경우

, 당신이 대신 OUTER JOIN를 사용하여 하나 개의 레코드의 일부로 다양한 콘텐츠 형식을 검색 할 수 있습니다 (없는 사람은 널 (NULL)로 반환됩니다) :

SELECT * FROM indextable it 
    LEFT OUTER JOIN contentaudio ca ON it.content_id = ca.content_id 
    LEFT OUTER JOIN contentvideo cv ON it.content_id = cv.content_id 
WHERE it.some_key = ? 

참고 content_type은이 경우에 전혀 관여하지 않습니다 (UNION select에서도 필요하지 않습니다).