水平垂直数据表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>
正如在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来获得期望的结果。 由于你的列名使用不同的语言,这就是为什么不能理解那些内容,所以你需要做这些建议的变化。也不能测试,因为没有你的表结构。
我不明白。我只想通过tgl的Pivot table.where标题组。 – 2014-12-05 08:23:01
@Adeputratioaldino:如果group by是必需的,那么它不可能通过我的答案&PIVOT在免费MySQL中不受支持...|通过静态查询,你不能这样做,除非'tgl'的值是静态的/修正的。第二个选择是创建存储过程。看看编辑的答案链接来帮助你。 :) – 2014-12-05 08:54:10
@Adeputratioaldino:你不明白你在想什么/需要'PIVOT'在那里。现在看到编辑的答案。 [最初,我只是解释说MySQL会水平返回行,所以......以垂直方式显示那些需要先存储变量然后显示] – 2014-12-12 13:07:04
所以,你想基本上从你在查询中拉动的数据做一个数据透视表? – Fluffeh 2014-12-05 07:44:34
为什么不简单地获取数据并使用PHP以您想要的方式显示它? MySQL不在表示层上,事实上它不是很好的在旋转。 – 2014-12-05 07:52:31
是的...我想水平显示$行[tgl]。基于垂直$ row [kom] – 2014-12-05 08:14:00