• 締切済み

内部結合のSELECTで取得した配列をわかりやすく

商品情報が入ったテーブルが2つあります。 一つは商品のスペックが入ったテーブル → tb_spec 一つは商品の種類と価格が入ったテーブル → tb_variation tb_spec ---------------- 商品ID, 重量 item001, 100 item002, 150 ---------------- tb_variation ---------------- 色, 商品ID, 価格 赤, item001, 12000 青, item001, 15000 黒, item002, 21000 白, item002, 20000 赤, item002, 23000 ---------------- これを一致する商品IDで内部結合でのSELECTで抽出します。  SELECT s.`商品ID`, s.`重量`, v.`色`, v.`価格`   FROM tb_spec AS s   INNER JOIN tb_variation AS v   ON s.`商品ID` = v.`商品ID` 結果は、  Array(   [0] => Array ([商品ID] =>item001 [重量] =>100 [色] =>赤 [価格] =>12000)   [1] => Array ([商品ID] =>item001 [重量] =>100 [色] =>青 [価格] =>15000)   [2] => Array ([商品ID] =>item002 [重量] =>100 [色] =>黒 [価格] =>21000)   [3] => Array ([商品ID] =>item002 [重量] =>100 [色] =>白 [価格] =>20000)   [4] => Array ([商品ID] =>item002 [重量] =>100 [色] =>赤 [価格] =>23000)  ) というように結果が帰ってきます。 これを、  Array(   [0] => Array ([商品ID] =>item001 [重量] =>100 [色] => Array(       [赤] => Array([価格] =>12000)       [青] => Array([価格] =>15000)   )   [1] => Array ([商品ID] =>item002 [重量] =>100 [色] => Array(       [黒] => Array([価格] =>21000)       [白] => Array([価格] =>20000)       [赤] => Array([価格] =>23000)   )  ) というように商品ID毎の配列で取得できるSQL文は書けるのでしょうか? 上記と多少配列の構造が変わっても良いのですが、商品ID毎に取得できればと思っています。 どうぞよろしくお願い致します。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ちなみにこんな感じ? $sql="・・・"; $temp=array(); $datas=array(); foreach ($conn->query($sql) as $row) { $data=Array ("商品ID" =>$row["商品ID"],"重量" =>$row["重量"]); if(!in_array($data,$temp)) $temp[]=$data; $key=array_search($data,$temp); $datas[$key]["色"][$row["色"]]=array("価格"=>$row["価格"]); } print_r($datas);

fantrax
質問者

お礼

わざわざコードも頂きましてありがとうございます。 PHP側で加工すれば好きな構造にできますからね。 全てクエリーの結果を頼らなくてもいいかもしれません。 参考にさせていただきたいと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

これはPHP側でデータを配列に格納する際にやれば済む話では?

fantrax
質問者

お礼

ありがとうございます。 そうですね、PHPが側でやってもよかった話ではありますね…。 あれから試行錯誤してPDOでなんとなくうまく出来た気がします。  $query = "   SELECT s.`商品ID`, s.`重量`, v.`色`, v.`価格`    FROM tb_spec AS s    INNER JOIN tb_variation AS v    ON s.`商品ID` = v.`商品ID`   ;";    $pr = $pdo->prepare($query);  $pr->execute();  $row = $pr->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP); 結果は、  Array(   [商品ID] => Array(     item001 => Array(       [0] => Array([重量] =>100 [色] =>赤 [価格] =>12000)       [1] => Array([重量] =>100 [色] =>青 [価格] =>15000)     )     item002 => Array(       [0] => Array([重量] =>150 [色] =>黒 [価格] =>21000)       [1] => Array([重量] =>150 [色] =>白 [価格] =>20000)       [2] => Array([重量] =>150 [色] =>赤 [価格] =>23000)     )   )  )   というように取得できました。

関連するQ&A