1

PHP を使用してきちんと表示されたテーブル構造で大量のデータを動作させることに取り組んできましたが、苦労していると言わざるを得ません。ついに列を呼び出すことができるようになったので、フィールドを追加すると、常にテーブルに追加されます。これが非常に簡単に管理されることを願っています。ただし、最初にテーブルをセットアップしたときは、ランダムな順序で配置しました。DESCRIBE を使用するtableと、正確な順序で表示されますが、より適切に整理する方法が見つかりません。私が持っているフォームのデータベースの最後に月/年があると言うのは意味がありません。

<?php 
require 'connect.php';
?>
<h3>Monthly Finances | <a href="new.php">Add New Month</a> </h3>
<table border="1" bordercolor ="#000000">
<tr>
<?php
$columns = "DESCRIBE  `month` ";
if($query_run_columns = mysql_query($columns)){
    $columnNames = array();
        while($column = mysql_fetch_assoc($query_run_columns)){
        echo '<th>'.$column['Field'].'</th>';
    }
}else{
    echo'sql error';
}

?>


<?php
$gatherdata = "SELECT `month`, `year`,`rent`,`electric`,`cable`,`cellphone`,`renters` FROM `month` ";
if($query_run = mysql_query($gatherdata)){

    while($row = mysql_fetch_assoc($query_run)){
        $rent = $row['rent'];
        $electric = $row['electric'];
        $cable = $row['cable'];
        $cellphone = $row['cellphone'];
        $renters = $row['renters'];
        $month = $row['month'];
        $year = $row['year'];

        echo '<tr>';
        echo '<td align="center">'.$month.'</td>';
        echo '<td algin="center">'.$year.'</td>';
        echo '<td align="center">'.$rent.'</td>';
        echo '<td align="center">'.$electric.'</td>';
        echo '<td align="center">'.$cable.'</td>';
        echo '<td align="center">'.$cellphone.'</td>';
        echo '<td align="center">'.$renters.'</td>';
        echo '</tr>';
    }
}else{
    echo 'query error';
}
?>
<br>View by month
</table>
<form action="index.php" method="GET">
<select name="months" value="all">
<?php
$gathermonths = "SELECT `month`, `year` FROM `month";

if($query_month_selector = mysql_query($gathermonths)){
    while($month_row = mysql_fetch_assoc($query_month_selector)){
        $month = $month_row['month'];
        $year = $month_row['year'];

        echo '<option value="'.$month.' '.$year.'">' .$month.' '.$year.'</option>';
    }
}
echo $_GET['months'];
?>
<input type="submit" value="View Selected Date"></input>
</select>
</form>

私のコードは完全ではなく、整然としたものではありませんが、私はこのプロジェクトをサボっているので、時間があればもっとクリーンアップします。しかし、効率的な整理方法を教えていただければ幸いです。

4

3 に答える 3

1

テーブルにインデックス/ID が含まれていますか?

「ORDER BY」で簡単に昇順/降順で並び替えることができます

ALTER TABLE `table_name` ORDER BY `id`

注 デフォルトORDER BYは昇順です。DESC下降したい場合は最後に置きます。

mysql クエリが適切な順序で結果を出力するようにしたい場合ORDER BYは、クエリで次を使用することもできます。

$gathermonths = "SELECT `month`, `year` FROM `month` ORDER BY `month` DESC";

GROUP BY結果を月ごとにグループ化する場合の関数もあります。

$gathermonths = "SELECT `month`, `year` FROM `month` GROUP BY `month`";
于 2012-04-28T20:49:13.620 に答える
1

クエリの代わりに、DESCRIBEを使用できますmysql_fetch_field。次に、列は常に同じ順序になりますSELECT

<?php
$gatherdata = "SELECT `month`, `year`,`rent`,`electric`,`cable`,`cellphone`,`renters` FROM `month` ";
if($query_run = mysql_query($gatherdata)){

    // Loop the columns to build the table headers
    echo '<table>';
    echo '<tr>';
    while ($i < mysql_num_fields($query_run)) {
        $field = mysql_fetch_field($query_run, $i);
        echo '<th>' . $field->name . '</th>';
        $i++;
    }
    echo '</tr>';

    // Your current data loop
    while($row = mysql_fetch_assoc($query_run)){
        // (...)
    }
    echo '</table>'
}
?> 
于 2012-04-28T21:06:14.647 に答える
1

取得する列を既に指定しているため、データベースにクエリを実行するのではなく、列ヘッダーを明示的に出力するだけです。

逆に、任意の SQL テーブルで動作するように HTML テーブル生成コードを抽象化する (したがって、データ アクセスを表示から分離する) 場合は、列ヘッダーを生成するときに列名を配列に記録し、出力時にこの配列を反復処理します。行。何も得られないので、$rent = $row['rent'];割り当てをなくすこともできます。PDO の使用:

/* data access */
$finances = $db->query('SELECT `month`, `year`,`rent`,`electric`,`cable`,`cellphone`,`renters` FROM `month`');

$columns = array();
for ($i = 0; $i < $finances->columnCount(); ++$i) {
    $meta = $finances->getColumnMeta($i);
    $columns[$meta['name']] = ucwords($meta['name']);
}

/* data display. Note this is completely independent of the type used to store 
   the colum & row data. All that matters are that $columns and $finances are 
   Traversable
 */
?>
<table>
  <thead>
    <tr>
      <?php foreach ($columns as $name => $label): ?>
        <th><?php echo $label ?></th>
      <?php endforeach ?>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($finances as $monthly): ?>
      <tr>
        <?php foreach ($columns as $name => $label): ?>
          <td><?php echo $monthly[$name]; ?></td>
        <?php endforeach ?>
      </tr>
    <?php endforeach; ?>
  </tbody>
</table>

エラー処理とモジュールへの抽象化は演習として残しました。

于 2012-04-28T21:20:26.620 に答える