できるだけ少ないデータベース クエリから希望する方法で結果を表示するための最良の方法について、少し助けを求めています。
クエリ結果列の 1 つを別のテーブルの新しい一意の列として使用し、データのようにマージしたいと考えています。
例えば
このクエリを実行します..
SELECT pd.production_date,pd.production_time,pd.production_net,
p.part_number, w.worker_name
FROM production as pd
INNER JOIN parts as p
ON pd.product_id = p.part_id
INNER JOIN locations as l
ON pd.location_id = l.location_id
INNER JOIN workers as w
ON pd.worker_id = w.worker_id
WHERE pd.production_date BETWEEN '$from' AND '$to'
AND p.part_number='$part_number'
ORDER BY pd.production_date
そして、次のような結果が得られます。
production_date--production_time--production_net--worker_name
2013-01-10--390--96--MMahe
2013-01-10--400--101--RMaloney
2013-01-11--460--96--JBurris
2013-01-11--210--43--MMahe
2013-01-14--285--48--LTaylor
2013-01-16--60--8--MRocquemore
2013-01-16--460--90--TUsher
2013-01-17--450--85--MRocquemore
2013-01-17--460--84--TUsher
2013-01-18--450--73--MRocquemore
2013-01-18--460--93--TUsher
2013-01-18--240--24--JBurris
次に、これらの結果を次のような Web ページに表示したいと思います。
Operators|01-10-2013|01-11-2013|01-14-2013|01-16-2013|01-17-2013|01-18-2013
MMahe|96|43|x|x|x|x
RMaloney|101|x|x|x|x|x
JBurris|x|96|x|x|x|24
LTaylor|x|x|48|x|x|x
MRocquemore|x|x|x|8|85|73
TUsher|x|x|x|90|84|93
私の考えは、最初に日を一意の値にフィルターしてから、それらを列として吐き出す必要があるということでした。これはこれで達成しました
$query=mysql_query($sql);
$days = array();
$results.='<div><table border="0"><th>Operator</th>';
while($row=mysql_fetch_array($query)) {
array_push($days,$row['production_date']);
}
$days=array_unique($days);
$column_count=count($days);
$n=0;
//create the columns (days) by looping through unique days
foreach($days as $value) {
$results.='<th>'.$value.'</th>';
}//end foreach
しかし、適切なセルに値をリストする方法がわかりません。この種のデータ操作の経験はありますか、または良い例を教えてもらえますか?