新生活を充実させるための「こだわり」を取材!!

商品情報が入ったテーブルが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毎に取得できればと思っています。

どうぞよろしくお願い致します。

教えて!goo グレード

A 回答 (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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/01/27 18:15

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

    • good
    • 0
この回答へのお礼

ありがとうございます。
そうですね、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)
    )
  )
 )
 
というように取得できました。

お礼日時:2014/01/27 18:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

教えて!goo グレード

関連するカテゴリからQ&Aを探す


人気Q&Aランキング