0

私は問題に直面しており、これを 4 時間解決しようとしていますが、今のところ解決策はありません。以下のような表として表示したい動的データがあります

Header1.................... Header2.................. HeaderN 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 ヘッダー
1のデータ1
ヘッダー1 のデータ2 ヘッダー1
のデータ3 ヘッダー
2 ヘッダー2のデータ1
ヘッダー2 のデータ2
ヘッダー2
のデータ3
. . .
HeaderNの HeaderN
の data1 HeaderN の
data2 の HeaderN
の data3

4

3 に答える 3

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>';
于 2013-06-12T15:23:19.440 に答える
0

クエリはコストがかかるため、可能であれば、このような状況では 1 回だけ実行する必要があります。

必要なものを取得するには、1 つのクエリですべてのデータを取得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 などの別のライブラリに切り替えることを検討する必要があります。

于 2013-06-12T15:29:32.740 に答える
0

1 つではなく 2 つのループが必要です。

ループでは最初にヘッダーを表示し、ヘッダー フィールドを配列に格納できます (必要な場合は...)。

2 番目のループは、データベースの行をループ処理し、内側のループで異なるテーブル セルの異なるフィールドを表示します。

于 2013-06-12T15:20:21.667 に答える