- 締切済み
内部結合の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毎に取得できればと思っています。 どうぞよろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
ちなみにこんな感じ? $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);
- yambejp
- ベストアンサー率51% (3827/7415)
これはPHP側でデータを配列に格納する際にやれば済む話では?
お礼
ありがとうございます。 そうですね、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) ) ) ) というように取得できました。
お礼
わざわざコードも頂きましてありがとうございます。 PHP側で加工すれば好きな構造にできますからね。 全てクエリーの結果を頼らなくてもいいかもしれません。 参考にさせていただきたいと思います。