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

如您所见,供应商 OPS 产品的部件并未像上述 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

您需要将循环分成两部分。第一部分检查您是否有新的/不同的供应商,并设置“外部”设置。然后是转储该供应商零件的内部零件。

例如

$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 回答