【问题标题】:Showing dynamic data as table in column wise将动态数据按列显示为表格
【发布时间】:2013-06-12 15:15:05
【问题描述】:

我遇到了一个问题,并试图解决这个问题 4 小时,但直到现在还没有解决方案。 我有动态数据,我喜欢将其显示为如下表格

标题1........标题2............标题N
Header1 的 data1.... Header2 的 data1.... HeaderN 的 data1
Header1 的 data2.... Header2 的 data2.... HeaderN 的 data2
Header1 的 data3.... Header2 的 data3.... HeaderN 的 data3
..................................................... ......
Header1 的 dataN.... 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 的 data1
Header1 的 data2
Header1 的 data3
页眉2
Header2 的 data1
Header2 的 data2
Header2 的 data3
. . .
页眉N
HeaderN 的 data1
HeaderN的data2
HeaderN的data3

【问题讨论】:

    标签: php mysql html-table


    【解决方案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>';
    

    【讨论】:

      【解决方案2】:

      你需要两个循环而不是一个。

      首先在循环中显示标题,然后可以将标题字段存储在数组中(如果需要...)。

      第二个循环遍历您的数据库行,并有一个内部循环来显示不同表格单元格中的不同字段。

      【讨论】:

        【解决方案3】:

        查询成本很高,因此如果可能,您应该只在这种情况下执行一次。

        要得到我认为你想要的,你可以在一个查询中检索所有数据,在第一行使用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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-05
          • 1970-01-01
          • 2017-10-05
          • 2011-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-03
          相关资源
          最近更新 更多