正如在HTML-Table中,您需要先編寫一行然後第二行,然後您有一個行,但要顯示在不同的行中VERTICALLY ...所以您需要將行存儲在變量中。
讓我告訴你如何。假設你有MySQL的3列行(在你的代碼),然後:
$row_1='<tr align="center">';
$row_2='<tr align="center">';
$row_3='<tr align="center">';
while ($row1 = mysql_fetch_array($hasil1))
{
$row_1.="<td>".$row1["tgl"]."</td>";
$row_2.="<td>".$row1["kom"]."</td>";
$row_3.="<td>".$row1["nilai"]."</td>";
}
echo $row_1."</tr>";
echo $row_1."</tr>";
echo $row_1."</tr>";
編輯:OP需要透視
[以上答案不正確的原因:如果group by
需要那麼它不可能通過上面的代碼(我要走了它將來的用戶)& PIVOT不免費的MySQL支持...
和
通過靜態查詢,你不能這樣做,除非tgl
的值是靜態的或固定的。因此,您需要使用動態查詢並且第二個選項是創建存儲過程。
兩種方法對這個問題進行了說明:Pivot table in MySQL - convert to pivot table with values in varchar format
編輯2:得到由PHP分析上面的鏈接後,做的方式:
$result = mysql_query("SELECT DISTINCT tgl FROM ambilmk WHERE nim='1';");
$tgls_col="";
while($row = mysql_fetch_array($result)){
$tgls_col.=",MAX(CASE WHEN ambilmk.tgl = '".$row[0]."' THEN ambilmk.nilai END) `".$row[0]."`";
}
$query1 = "SELECT list.kom as Kom ".$tgls_col." FROM ambilmk LEFT JOIN list
ON ambilmk.kodemk=list.id_check where nim='1' GROUP BY ambilmk.tgl,list.kom;";
$hasil1 = mysql_query($query1);
$fields=mysql_fetch_fields($hasil1);
echo '<tr>';
foreach ($fields as $col) {
echo '<th>'.$col->name.'</th>';
}
echo '</tr>';
$fields=count($fields);
while($row=mysql_fetch_array($hasil1)){
echo '<tr>';
for($I=0;$I<$fields;I++){
echo "<td>".$row[$I].'</td>';
}
echo '</tr>';
}
這裏你可以在list.kom
和ambilmk.nilai
之間切換,並且可以將聚合功能MAX
更改爲您想要的任何其他類型COUNT
等。也可以切換GROUP BY中的列順序caluse來獲得期望的結果。 由於你的列名使用不同的語言,這就是爲什麼不能理解那些內容,所以你需要做這些建議的變化。也不能測試,因爲沒有你的表結構。
所以,你想基本上從你在查詢中拉動的數據做一個數據透視表? – Fluffeh 2014-12-05 07:44:34
爲什麼不簡單地獲取數據並使用PHP以您想要的方式顯示它? MySQL不在表示層上,事實上它不是很好的在旋轉。 – 2014-12-05 07:52:31
是的...我想水平顯示$行[tgl]。基於垂直$ row [kom] – 2014-12-05 08:14:00