2012-07-26 3 views
2

MySQL과 관계형 데이터베이스에 관해서는 꽤 초보입니다. 그러나 제가 작업하고있는 프로젝트에서는 복잡한 SELECT 문을 쓰도록 요구하고 있습니다.이 시점에서 약간 혼란 스럽습니다. 다양한 제품에 대한 정보를 저장하는 세 개의 테이블이 있습니다. Table1은 각 제품의 페이지 컨텐츠를 저장하고 table2는 각 제품 (모델, 재료, 색상 등)에 대한 특정 기준을 저장하고, table3은 T1과 T2 사이에 다 대다 관계를 설정하는 연결 테이블입니다.SELECT 문 구체화

내가 예를 들어 제품을 선택할 수있는 방법에 대한 혼란 스러워요
Array 
(
    [name] => color 
    [value] => Red 
    [title] => Product 1 
) 
Array 
(
    [name] => material 
    [value] => Wood 
    [title] => Product 1 
) 

, 모두와 'wood' - 기본적으로 기록을'빨간색 '이 있습니다

이 내 선택 문이 나에게주고있는 것이다 각 제품 및 설명.

Array 
(
    [material] => Wood 
    [color] => Red 
    [title] => Product 1 
) 

SELECT 문 : 당신은 다른 테이블에 다시 가입해야

SELECT table2.name, table3.value, table1.title 
FROM table2 

INNER JOIN table3 
ON table2.id=table3.varid 

INNER JOIN table1 
ON table1.id=table3.contentid 

답변

1

. 당신은 그 (것)들을 따로 따로 구분하기 위해 테이블 ​​별칭을해야합니다 :

SELECT table2.name, table3.value, table1.title, t3.value, t1.title 
FROM table2 
JOIN table3 ON table2.id=table3.varid and value = 'Wood' 
JOIN table1 ON table1.id=table3.contentid 
JOIN table3 t3 ON table2.id=t3.varid and value = 'Red' 
JOIN table1 t1 ON t1.id=t3.contentid; 

당신은 WHERE 절에서 값에 대한 테스트를 넣을 수 있지만 술어로 실행되기 때문에이 방법이 더 효율적입니다 오히려되어 조인 이후에는 전체 조인 결과에 대해 INNER JOINJOIN는 의미에서 동일 함을

주 (INNER는 암시)

+0

감사합니다! 나는 테이블에 앨리어싱을했다. 지금은 더 가까워 보이지만 지금은 어떤 페이지도 반환하지 않습니다. 레드와 우드의 가치를 지닌 커플을 최소한 반환해야합니다. – Vecta