gpt4 book ai didi

php - 在 PHP 中对查询结果进行分组

转载 作者:行者123 更新时间:2023-12-04 05:11:24 24 4
gpt4 key购买 nike

我正在使用以下查询来填充表:

$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

正如您所看到的,供应商 O.P.S 产品的零件并未像上述 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]";}

最佳答案

在每个循环中,您必须决定是否该绘制标题——您将列出一个新的供应商。如果是 不是 一个新的供应商,您仍在列出您绘制最后一个标题的零件的零件,因此您不想要标题或结束表格。

$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! */
}

文档
  • foreach - http://php.net/manual/en/control-structures.foreach.php
  • mysql_query ( 已弃用 ) - http://php.net/manual/en/function.mysql-query.php
  • PDO - http://www.php.net/manual/en/book.pdo.php
  • PDO::prepare - http://www.php.net/manual/en/pdo.prepare.php
  • PDOStatement::fetch - http://www.php.net/manual/en/pdostatement.fetch.php
  • PDOStatement::execute - http://www.php.net/manual/en/pdostatement.execute.php
  • 关于php - 在 PHP 中对查询结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14882689/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com