我正面临一个问题,并试图解决这个问题4个小时,但直到现在还没有解决方案。 我有动态数据,我喜欢将其显示为如下表
Header1 .................. Header2 ................ HeaderN
Header1的数据1 .... Header2的数据1 .... HeaderN的数据1
Header1的数据2 .... Header2的数据2 .... HeaderN的数据2
Header1的数据3 .... Header2的数据3 .... HeaderN的数据3
.................................................. ...........
Header1的数据N .... Header2的dataN .... HeaderN的dataN
这是我的代码:
foreach($query_all_field as $secondary_data):
?><th><?php echo $secondary_data;?></th><?php
$sql_data = mysql_query("SELECT `$secondary_data` FROM `$table_name`");
if(mysql_num_rows($sql_data)){
while($result_data = mysql_fetch_object($sql_data)){
?><tr><td><?php echo $result_data->$secondary_data;?></td></tr><?php
}
}
endforeach;
最重要的事项$secondary_data
是表格的所有标题名称,它们是完全动态的。然后我试图找到每个标题的数据。
但它现在显示如下:
头1
Header1的数据1
Header1的数据2
Header1的数据3
头2
Header2的数据1
Header2的数据2
Header2的数据3
。 。 。
HeaderN
HeaderN的数据1
HeaderN的数据2
HeaderN的数据3
答案 0 :(得分:1)
您没有正确构建表格。你在关闭/使用之前的那个元素之前打开一个TR
元素。尝试:
echo '<table><tr>';
foreach($query_all_field as $secondary_data):
?>
<td>
<table>
<tr><th><?php echo $secondary_data;?></th></tr>
<?php
$sql_data = mysql_query("SELECT `$secondary_data` FROM `$table_name`");
if(mysql_num_rows($sql_data)){
while($result_data = mysql_fetch_object($sql_data)){
?><tr><td><?php echo $result_data->$secondary_data;?></td></tr><?php
}
}?>
</table>
</td>
<?php
endforeach;
echo '</tr></table>';
答案 1 :(得分:0)
你需要两个循环而不是一个。
首先在循环中显示标题,然后可以将标题字段存储在数组中(如果需要......)。
第二个循环遍历数据库行,并有一个内部循环来显示不同表格单元格中的不同字段。
答案 2 :(得分:0)
查询成本很高,所以如果可能的话,你应该只在这样的情况下做一次。
要获得我想要的内容,您可以在一个查询中检索所有数据,在第一行使用array_keys
找出您正在使用的列,然后循环遍历数据添加一个每个数据库行的新表行。例如;
$data = mysql_query("SELECT * FROM `$table_name`");
if (mysql_num_rows($data)) {
echo '<table>';
$headerRow = true;
while ($row = mysql_fetch_assoc($data)) {
if ($headerRow) {
$headerRow = false;
echo '<tr>';
foreach (array_keys($row) as $header) {
echo "<th>$header</th>";
}
echo '</tr>';
}
echo '<tr>';
foreach ($row as $value) {
echo "<td>$value</td>";
}
echo '</tr>';
}
echo '</table>';
}
还应该注意,mysql_*
函数已被弃用,您应该考虑切换到不同的库,例如mysqli或PDO。