2

次のクエリを使用してテーブルにデータを入力しています。

$result = mysql_query("SELECT vendor, part_number, machine, Sum(q_received) AS received, Sum(q_rejected) AS rejected FROM qa_parts Group by vendor, part_number, machine Order by vendor ASC");

ベンダーごとに結果をグループ化し、ベンダーの下に、それらから来たすべての部品とその詳細を表示したいと思います。

これが私がする必要があることです:

http://www.gen-techno.com/images/old.jpg

現在行っていること:

http://www.gen-techno.com/images/new.jpg

ご覧のとおり、Vendor OPS Products の部品は、上記の Allied Electronics の部品の例のように、そのベンダーの下にグループ化されていません。

今のところ私のテーブルコード:

while($row = mysql_fetch_array($result))
  {
echo "<h4>" . $row['vendor'] . "</h4>[fancy_table]<table>
<tr>
<th>Part Number</th>
<th>Quantity Received</th>
<th>Quantity Rejected</th>
<th>Machine</th>
</tr>";


  echo "<tr>";
  echo "<td>" . $row['part_number'] . "</td>";
  echo "<td>" . $row['received'] . "</td>";
  echo "<td>" . $row['rejected'] . "</td>";
  echo "<td>" . $row['machine'] . "</td>";
  echo "</tr>";
  echo "</table>[/fancy_table]";}
4

2 に答える 2

3

各ループの間に、見出しを描画する時期かどうかを決定する必要があります。つまり、新しいベンダーをリストします。それ新しいベンダーでない場合は、最後に見出しを描いたものの部品をまだリストしているので、見出しや表を終了したくありません.

$current_vendor = false;
while($row = mysql_fetch_array($result)) {
    // listing a new vendor? Output the heading, start the table
    if ($row['vendor'] != $current_vendor) {
            if ($current_vendor !== false)
                echo '</table>[/fancy_table]'; // if we're changing vendors, close the table
        echo '
            <h4>'.$row['vendor'].'</h4>[fancy_table]
            <table>
                <tr>
                <th>Part Number</th>
                <th>Quantity Received</th>
                <th>Quantity Rejected</th>
                <th>Machine</th>
                </tr>
        ';
        $current_vendor = $row['vendor'];
    }
    // output the row of data
    echo '<tr>
        <td>'.$row['part_number'].'</td>
        <td>'.$row['received'].'</td>
        <td>'.$row['rejected'].'</td>
        <td>'.$row['machine'].'</td>
        </tr>
    ';
}
echo '</table>[/fancy_table]'; // close the final table

別の注意として、PDO を使用するには、このコードの更新を開始する必要があります。明らかに、あなたはかつて存在していたものを更新している最中です... PDO をこの更新の一部にします。関数はmysql_*非推奨になりつつあり、間もなくなくなります。

PDO への移行は難しくありません。また、後で「壊れていないので、修正しないでください」という問題に直面するよりも、既に作業を行っている方がはるかに簡単です。

優れた PDO DBA メソッドを使用したコードを簡単に見てみましょう。

   $pdo = new PDO("mysql:host=localhost;dbname=database", '-username-', '-password-');
   $sql = '
        SELECT
            vendor, 
            part_number, 
            machine, 
            SUM(q_received) AS "received",
            SUM(q_rejected) AS "rejected" 
        FROM 
            qa_parts 
        GROUP BY 
            vendor, 
            part_number, 
            machine 
        ORDER BY 
            vendor ASC
    ';
    $statement = $pdo->prepare($sql);
    $statement->execute();
    while ($order = $statement->fetch()) {
        /* Put your table code here! */
    }

ドキュメンテーション

于 2013-02-14T19:45:42.973 に答える
0

ループを 2 つの部分に分割する必要があります。最初の部分は、新しい/異なるベンダーを持っているかどうかを確認し、「外部」セットアップをセットアップします。次に、そのベンダーの部品を捨てる内側の部分。

例えば

$prev_vendor = null;
while($row = ...) {
    if ($row['vendor'] != $prev_vendor) {
       ... new vendor stuff ...
       $prev_vendor = $row['vendor']; // update vendor for next iteration
    }
    ... dump this row's machine data ...
}
于 2013-02-14T19:42:05.627 に答える