
商品情報が入ったテーブルが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毎に取得できればと思っています。
どうぞよろしくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
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);
わざわざコードも頂きましてありがとうございます。
PHP側で加工すれば好きな構造にできますからね。
全てクエリーの結果を頼らなくてもいいかもしれません。
参考にさせていただきたいと思います。
No.1
- 回答日時:
これは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)
)
)
)
というように取得できました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
人気Q&Aランキング
-
4
メーカー小売希望価格?・・・
-
5
家電店(地域電器専門店)の1...
-
6
キッチン家電の製品等の正規の...
-
7
航空券の値段の変動
-
8
1坪ってどれくらいの大きさ?
-
9
金属の価格(鉄、銅)
-
10
グループの最後の行に書式、計...
-
11
「リピーター」の逆は?
-
12
5月、6月のキャンペーン名
-
13
“加重販売店率”という言葉の意味
-
14
コトラーの「商品は便益の束で...
-
15
エクセルを使って、商品管理を...
-
16
C.B.Pって何の省略でしょうか?...
-
17
"スレスレ" "ギリギリ" を丁寧...
-
18
市場環境とは
-
19
プレゼン資料(PPT)の作成につい...
-
20
アムウェイでの生活について。
おすすめ情報
公式facebook
公式twitter