水平垂直数据表php mysql

问题描述:

我有代码显示表水平。水平垂直数据表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

正如在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