2012-03-16 2 views
1

이것이 중복되었을 것으로 확신하며 이것이 다소 어리석은 질문 일 것이라고 확신합니다. 나는 MySQL의 전문가는 아니며 SKU_ID와 관련된 제품 SKU 및 옵션에 대한 다소 불쾌한 데이터베이스를 가지고 있습니다.MySQL에서 다중 테이블 및 관계 선택

나는 $ productId와 같은 제품이 있으며, 3 색 (핑크, 퍼플, 블랙)의 T 셔츠입니다. 여기에 (에만 관련 정보를 표시) 데이터베이스 정보입니다 :

tbl_skus 
SKU_ID   SKU_ProductID 
    62     32 
    63     32 
    64     32 
    62     32 
    62     32 
    67     32 

tbl_skuoption_rel 
optn_rel_SKU_ID  optn_rel_Option_ID 
    62      32 
    62      34 
    63      34 
    63      33 
    64      35 
    64      32 
    65      35 
    65      33 
    66      36 
    66      32 
    67      36 
    67      33 

tbl_skuoptions 
option_ID  option_Type_ID  option_Name  option_Sort 
    32    5    Small    1 
    33    5    Medium    2 
    34    6    Pink    1 
    35    6    Purple    2 
    36    6    Black    3 

내 상사와 난 그냥이 생각 이상 아마, 나는 내 쿼리에 합류와 함께 잘 따라하지 않습니다. 그것이 내가이 일을하기 위해해야 ​​할 일이라면 그렇게 될 것이지만 나는 더 트릭스터에 가깝습니다.

다음
$SKU_QUERY = mysql_query("SELECT SKU_ID FROM tbl_skus WHERE SKU_ProductID = '$productId'") or die(mysql_error()); 
$SKU_NUM_ROWS = mysql_num_rows($SKU_QUERY); 
if($SKU_NUM_ROWS > 0) { 
    while($SKU_OBJECT = mysql_fetch_object($SKU_QUERY)) { 
     $SKU_ID = $SKU_OBJECT->SKU_ID; 
     $REL_OPTION_QUERY = mysql_query("SELECT optn_rel_Option_ID FROM tbl_skuoption_rel WHERE optn_rel_SKU_ID = '$SKU_ID' LIMIT 0,1") or die(mysql_error()); 
     $REL_OPTION_NUM_ROWS = mysql_num_rows($REL_OPTION_QUERY); 
     if($REL_OPTION_NUM_ROWS > 0) { 
      while($REL_OPTION_OBJECT = mysql_fetch_object($REL_OPTION_QUERY)) { 
       $OPTION_ID = $REL_OPTION_OBJECT->optn_rel_Option_ID; 
       $OPTIONS_QUERY = mysql_query("SELECT option_Name FROM tbl_skuoptions WHERE option_ID = '$OPTION_ID' AND option_Type_ID = '6' ORDER BY option_sort LIMIT 0,1") or die(mysql_error()); 
       $OPTIONS_NUM_ROWS = mysql_num_rows($OPTIONS_QUERY); 
       if($OPTIONS_NUM_ROWS > 0) { 
        $OPTIONS_OBJECT = mysql_fetch_object($OPTIONS_QUERY); 
        echo "$OPTIONS_OBJECT->option_Name, "; 
       } 
      } 
     } 
    }   
} 

하는 내 결과 것 : 난 그냥 여분의 색상 이름을 벗을 수 있다면 핑크, 퍼플, 퍼플, 블랙,

블랙, 나는 괜찮을거야 여기 내 시도입니다. 나는 최대 5 ~ 6 색 이상을 수행하지 않으므로로드에 대한 우려는 필자의 의견으로는 필요하지 않습니다. 다시 한번, 그것이 합류하는 것만 가능하다면, 나는 그것을 할 것입니다. 그러나 나의 10 분 시도는 내가이 방법으로 그것을 할 수 있음을 증명하는 것처럼 보인다.

도움을 주셔서 감사합니다. 항상 감사드립니다.

나의 사과 :

편집 ---

가 나는 결과로 원하는 것을 포함하는 것을 잊었다. 지금 당장은 색상을 다루는 옵션 문자열을 만드는 것뿐입니다. 그래서 내 현재 결과는 "핑크, 퍼플, 블랙, 블랙"이고 내 결과는 이어야합니다.은 "핑크, 퍼플, 블랙"이되어야합니다. 나는 그것이 미친 일에 대한 간단한 결과라는 것을 알고 있지만, 나중에 이것을 연장 할 것이다.

+1

당신이 몇 문장에서 찾고있는 결과를 설명 할 수? – abesto

+1

그래서 전반적으로, 당신은 무엇을하고 싶습니까? 당신이 당신이 묻고 싶은 것을 잊어 버린 배경에 대해 너무 많이 설명하는 것 같아서 – Joseph

+0

사과드립니다. 지금 당장은 색상을 다루는 옵션 문자열을 만드는 것뿐입니다. 그래서 당신은 나의 현재 결과가 "핑크, 퍼플, 블랙, 블랙"이고 나의 결과는 ** "핑크, 퍼플, 블랙"이어야한다고 봅니다. 나는 그것이 미친 일에 대한 간단한 결과라는 것을 알고 있지만, 나중에 이것을 연장 할 것이다. – lxndr

답변

2

내가 join이 훨씬 쉽게 만들 것 사용하여 생각 :

SELECT DISTINCT o.option_Name 
FROM 
    tbl_skus s 
    JOIN tbl_skuoption_rel sor ON sor.optn_rel_SKU_ID = s.SKU_ID 
    JOIN tbl_skuoptions o 
     ON o.option_ID = sor.optn_rel_Option_ID 
     AND o.option_Type_ID = '6' 
WHERE s.SKU_ProductID = '$productId' 
ORDER BY o.option_sort 
+0

완벽하게 작업했습니다. 고맙습니다. 충분한 인원이 있다면 선거 투표하십시오. – lxndr

+0

@lxndr 이봐, 너는 신비하게도 투표권을 얻기에 충분한 담당자를 가지고있다. ;;-) –