2012-05-21 4 views
0

다음과 같은 상황이 있습니다.하나의 열에 두 개의 외래 키가 있습니다. 분할하는 방법?

조합 테이블 :
Combination ID | Option ID's

옵션 표 :
Option ID | Option Name | Option Value

받는 다스 려 할 때 조합 테이블의 컬럼 (하나의 열에서) "2345,3421"와 같은 판독하고 "ID의 옵션" 조합과 관련된 두 가지 옵션.

각 조합에 대해 가능한 모든 조합과 값을 나열하는 목록을 생성 할 수 있습니까?

즉. combination1 | option1 | name:size | value:Small | option2 | name:color | value:Blue

+0

하지 않습니다. 귀하는 First Normal Form을 위반했으며 귀하가 겪고있는 합병증은 그렇게하는 대가입니다. –

+0

그것은 내가 아니었다 :) 이것은 interspire 장바구니와 함께 일하는 것입니다. – jason3w

+0

충분히 좋습니다. 어쨌든 몇 가지 제안을 보는 것은 흥미로울 것입니다. 슬프게도, 이것은 아마도 많은 추악한 결합 술어를 수반 할 것입니다. 이 같은 일은 할 수 있지만 결코 예쁘지는 않습니다. –

답변

1

이 같은 쿼리를 시도 할 수 있습니다 -

SELECT 
    c.Combination_ID, GROUP_CONCAT(CONCAT(o.Option_Name, '=', o.Option_Value)) 
FROM 
    combinations c 
LEFT JOIN options o 
    ON find_in_set(o.Option_ID, c.Option_IDs) 
GROUP BY 
    c.Combination_ID 

을 테이블 정상화 이안 McLaird 보낸에 동의합니다. 깨끗한 방법의 모든 종류의


SELECT 
    c.Combination_ID, 
    GROUP_CONCAT(o.Option_Name), 
    GROUP_CONCAT(o.Option_Value) 
FROM 
    combinations c 
LEFT JOIN options o 
    ON find_in_set(o.Option_ID, c.Option_IDs) 
GROUP BY 
    c.Combination_ID 
+0

legandary! 대단히 감사합니다!! – jason3w

+0

한 번 더 질문하면서 바쁘다. 반환 된 o.option_name과 값을 별도의 열로 나눌 수 있습니까? – jason3w

+0

답변을 변경했습니다. – Devart

관련 문제