2014-12-05 55 views
-1

我有代碼顯示錶水平。水平垂直數據表php mysql

我想可以顯示這樣的表格表。

   12/15/2014 || 12/16/2014 

的Rumah ATM ........... | YA .................. || YA ..............等

</tr> 
 
<?php 
 
$nip= $_REQUEST["txtcar"]; 
 
include ("../connect.php"); 
 
$query1 = "SELECT ambilmk.tgl,ambilmk.nim,ambilmk.kodeMK,ambilmk.nilai,list.kom,list.id_check 
 
FROM ambilmk 
 
LEFT JOIN list 
 
ON ambilmk.kodemk=list.id_check 
 
where nim='1' 
 
"; 
 
$hasil1 = mysql_query($query1); 
 
$no = 1; 
 
while ($row1 = mysql_fetch_array($hasil1)) 
 
{?> 
 
    <tr align="center"> 
 
    <td><?php echo $row1["tgl"]; ?></td> 
 
    <td><?php echo $row1["kom"]; ?></td> 
 
    <td><?php echo $row1["nilai"]; ?></td> 
 
    </tr> 
 
<?php } ?> 
 

 
</table>
燦你幫忙給代碼。顯示錶垂直水平

+0

所以,你想基本上從你在查詢中拉動的數據做一個數據透視表? – Fluffeh 2014-12-05 07:44:34

+0

爲什麼不簡單地獲取數據並使用PHP以您想要的方式顯示它? MySQL不在表示層上,事實上它不是很好的在旋轉。 – 2014-12-05 07:52:31

+0

是的...我想水平顯示$行[tgl]。基於垂直$ row [kom] – 2014-12-05 08:14:00

回答

0

正如在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.komambilmk.nilai之間切換,並且可以將聚合功能MAX更改爲您想要的任何其他類型COUNT等。也可以切換GROUP BY中的列順序caluse來獲得期望的結果。 由於你的列名使用不同的語言,這就是爲什麼不能理解那些內容,所以你需要做這些建議的變化。也不能測試,因爲沒有你的表結構。

+0

我不明白。我只想通過tgl的Pivot table.where標題組。 – 2014-12-05 08:23:01

+0

@Adeputratioaldino:如果group by是必需的,那麼它不可能通過我的答案&PIVOT在免費MySQL中不受支持...|通過靜態查詢,你不能這樣做,除非'tgl'的值是靜態的/修正的。第二個選擇是創建存儲過程。看看編輯的答案鏈接來幫助你。 :) – 2014-12-05 08:54:10

+0

@Adeputratioaldino:你不明白你在想什麼/需要'PIVOT'在那裏。現在看到編輯的答案。 [最初,我只是解釋說MySQL會水平返回行,所以......以垂直方式顯示那些需要先存儲變量然後顯示] – 2014-12-12 13:07:04