嵌套做,而在PHP循环
我尝试获取数据库中的每个客户每月的总销量,我用下面的代码:嵌套做,而在PHP循环
SELECT *, SUM(total_amount)
FROM orders
WHERE YEAR(order_date) = YEAR(NOW()) AND client = clientname
GROUP BY MONTH(datetime)
CLIENTNAME是持有客户数组变量。
这里是SQL查询执行(IM使用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));
?>
IM正确获得月度销量第一客户端,但对于下面的客户,它显示的结果为零。我不知道我错过了哪些代码来让它工作!
您发布的代码不起作用。从the docs:
做,而循环非常相似,而循环,除了真相表达在每个迭代结束,而不是在开始时检查。
换句话说,$row_MonthlySalesClient = mysql_fetch_assoc($MonthlySalesClient)
尚未在内部do-while循环的第一次迭代中运行。
此外,我没有看到你在哪里实际执行SQL查询。是否有更多的代码?
尝试更改为while循环,然后检测该集是否为空以显示“空结果”消息。从代码的角度来看,并不能保证查询的结果集中会有任何行,这就意味着使用do-while意味着什么。
编辑:我认为你的问题是你只执行一次客户端名称查询,而不是每行一次。至少在你展示给他们的循环中,$MonthlySalesClient
的结果只会有第一个客户端名称的结果。
尝试移动$MonthlySalesClient
的所有内容,其中包括$query_
格式化,mysql_query()
和外部循环中的mysql_fetch_assoc()调用。这应该为您尝试构建的每个客户端信息表格行提供新的每月数据。
其实我忘了粘贴查询,在这里: – user1814160
因为你在查询后执行sql提取,所以'do-while'循环将起作用。大多数人仍然只是写'while($ row = fetch($ result){// stuff}',因为你仍然不能保证有任何结果。我想我会看到你实际询问的问题,用另一位代码回答。 –
您能显示生成'$ row_clients'的值的代码吗? – thatidiotguy
向我们展示了你构造你的结果的方式.... $ clients和$ MonthlySalesClient – Hackerman