2012-03-16 12 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分の試みは、私がこのようにすることができることを証明するようです。

ご協力いただき、ありがとうございます。

私の謝罪:

EDIT ---

は私が結果として望ん含めるのを忘れていました。今のところ私がしようとしているのは、色を扱うオプションの文字列を作成することです。だから私の現在の結果は "ピンク、紫、黒、黒"と私の結果 "ピンク、紫、黒"になるはずです。私はそれがこのような狂気のための簡単な結果であることを知っていますが、私は後でそれを拡張します。

+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ねえ、それを見て...あなたは不思議なことに今投票に十分な担当者を持っている... ;-) –

関連する問題