MySQLには行列を入れ替える機能はなく、行数が不定の場合はなおさら記述が難しそうですね。
SQLとphpの処理を組み合わせる必要があるように思います。
まず、Person全体のリストを取得します。
sql
1select distinct Table_B.Person from Table_A, Table_B
2where Table_A.ID = Table_B.ID
3order by Table_A.ID, Table_B.Person
結果は
次に、両方のテーブルを結合してデータを抽出します。
sql
1select Table_A.ID, Table_A.Product, Table_B.Person from Table_A, Table_B
2where Table_A.ID = Table_B.ID
3order by Table_A.ID, Table_B.Person
結果は
ID,Product,Person
01,car,tanaka
01,car,yamada
02,water,suzuki
02,water,tanaka
02,water,yamada
それぞれのクエリの結果が、fetchAllしたとして人は$person、結合した結果は$dataに入っているとします。
php
1$result = array();
2foreach($data as $line){
3 foreach($person as $name) {
4
5 if(!isset($result[$line['ID']][$line['Product']][$name]) || $result[$line['ID']][$line['Product']][$name] == ''){
6 $value = $line['Person'] == $name ? $name : '';
7 $result[$line['ID']][$line['Product']][$name] = $value;
8 }
9
10 }
11}
12
13var_dump($result);
結果は
array(2) {
["01"]=>
array(1) {
["car"]=>
array(3) {
["tanaka"]=>
string(6) "tanaka"
["yamada"]=>
string(6) "yamada"
["suzuki"]=>
string(0) ""
}
}
["02"]=>
array(1) {
["water"]=>
array(3) {
["tanaka"]=>
string(6) "tanaka"
["yamada"]=>
string(6) "yamada"
["suzuki"]=>
string(6) "suzuki"
}
}
}
でどうでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/22 00:49