我试图获取数据库中每个客户的每月总销售额,我使用了以下代码:
SELECT *, SUM(total_amount)
FROM orders
WHERE YEAR(order_date) = YEAR(NOW()) AND client = clientname
GROUP BY MONTH(datetime)
clientname 是保存客户端数组的变量。
这里是sql查询执行(我使用的是dreamweaver):
mysql_select_db($database, $server);
$query_clients = "SELECT client_name
FROM clients
ORDER BY client_name ASC";
$clients = mysql_query($query_clients, $server)
or die(mysql_error());
$row_clients = mysql_fetch_assoc($clients);
$totalRows_clients = mysql_num_rows($clients);
$clientname_MonthlySalesClient = "-1";
if (isset($row_clients['client_name'])) {
$clientname_MonthlySalesClient = $row_clients['client_name'];
}
mysql_select_db($database_server, $server);
$query_MonthlySalesClient =
sprintf("SELECT *, SUM(total_amount)
FROM orders
WHERE YEAR(order_date) = YEAR(NOW())
AND client = %s
GROUP BY MONTH(order_date)",
GetSQLValueString($clientname_MonthlySalesClient, "text"));
$MonthlySalesClient = mysql_query($query_MonthlySalesClient, $server) or die(mysql_error());
$row_MonthlySalesClient = mysql_fetch_assoc($MonthlySalesClient);
$totalRows_MonthlySalesClient = mysql_num_rows($MonthlySalesClient);
然后我在 PHP 中使用了以下代码:
<?php do { ?>
<tr>
<td>
<?php echo $row_clients['client_name']; ?>
</td>
<?php do { ?>
<td>
<?php
echo number_format($row_MonthlySalesClient['SUM(total_amount)']);
?>
</td>
<?php
} while ($row_MonthlySalesClient = mysql_fetch_assoc($MonthlySalesClient));
?>
</tr>
<?php }
while ($row_clients = mysql_fetch_assoc($clients));
?>
我正确地获得了第一个客户的月销售额,但对于后续客户,它显示零结果。我不知道我缺少哪些代码才能让它工作!
最佳答案
您发布的代码不起作用。来自 the docs :
do-while loops are very similar to while loops, except the truth expression is checked at the end of each iteration instead of in the beginning.
换句话说,$row_MonthlySalesClient = mysql_fetch_assoc($MonthlySalesClient)
尚未在内部 do-while 循环的第一次迭代中运行。
此外,我不知道您实际上在哪里执行 SQL 查询。您的代码还有更多内容吗?
尝试更改为 while 循环,然后检测集合是否为空以显示“空结果”消息。从代码的角度来看,不能保证查询的结果集中会有任何行,这是使用 do-while 所暗示的。
编辑:我认为您的问题是您只执行一次客户端名称查询,而不是每行执行一次。至少在您展示的循环中,$MonthlySalesClient
结果将仅包含第一个客户名称的结果。
尝试移动您使用 $MonthlySalesClient
所做的一切,包括 $query_
格式、mysql_query()
和 `mysql_fetch_assoc( ) 在外循环内部调用。这将为您尝试构建的客户信息的每个表行提供最新的每月数据。
关于php - PHP 中嵌套 do while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597833/