以列方式将动态数据显示为表格

时间:2013-06-12 15:15:06

标签: php mysql html-table

我正面临一个问题,并试图解决这个问题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

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。

相关问题