You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP & MySQL实现供应商应付账款总额统计系统

没问题,我来帮你搞定这个供应商应付账款统计的需求!你的核心问题是需要对供应商进行分组汇总,而不是逐条显示记录,下面是具体的解决方案:

实现供应商应付账款总额统计系统

你当前的代码会返回所有匹配id=$id的单条记录,导致同一个供应商重复出现。要实现每个供应商仅显示一次并展示应付总额,关键是利用MySQL的分组聚合功能,而不是循环所有原始记录。

步骤1:编写正确的SQL查询

我们需要用GROUP BY按供应商分组,搭配SUM()函数计算该供应商所有dues的总和。另外注意:原代码中的WHERE id=$id可能不符合需求——如果id是每条记录的唯一标识,这个条件只会返回单条记录,根本没法做汇总。如果是要过滤特定范围的记录(比如某时间段),可以保留WHERE子句;如果不需要过滤,直接去掉即可。

正确的SQL语句如下:

SELECT 
  supplier, 
  SUM(dues) AS total_dues, 
  MIN(id) AS representative_id 
FROM managment 
-- 这里可以加过滤条件,比如 WHERE create_time >= '2024-01-01'
GROUP BY supplier
ORDER BY supplier;
  • SUM(dues) AS total_dues:计算每个供应商的应付总额,给结果起别名方便PHP调用
  • MIN(id) AS representative_id:分组后每条记录对应多个id,这里取最小的id作为代表(你也可以改成MAX(id),根据需求调整)
  • GROUP BY supplier:强制MySQL按供应商分组,确保每个供应商只返回一行汇总数据

步骤2:修改PHP代码

把原有查询替换成上面的SQL,然后循环输出汇总后的内容即可:

// 假设$connection已经是有效的MySQL连接
$sql = "SELECT supplier, SUM(dues) AS total_dues, MIN(id) AS representative_id FROM managment GROUP BY supplier ORDER BY supplier";
$query = mysqli_query($connection, $sql);

// 检查查询是否成功,避免报错
if (!$query) {
    die("查询失败: " . mysqli_error($connection));
}
?>

<table border="1">
    <thead>
        <tr>
            <th>代表ID</th>
            <th>供应商</th>
            <th>应付总额</th>
        </tr>
    </thead>
    <tbody>
        <?php while ($row = mysqli_fetch_assoc($query)) { ?>
        <tr>
            <td><?php echo $row['representative_id']; ?></td>
            <td><?php echo htmlspecialchars($row['supplier']); ?></td>
            <td><?php echo htmlspecialchars($row['total_dues']); ?></td>
        </tr>
        <?php } ?>
    </tbody>
</table>

步骤3:安全优化(必做!)

如果你的查询需要加入动态条件(比如原代码中的$id),绝对不要直接拼接SQL字符串,要用预处理语句防止SQL注入:

// 示例:过滤某个分类下的供应商
$category_id = 5; // 假设这是动态传入的参数
$sql = "SELECT supplier, SUM(dues) AS total_dues, MIN(id) AS representative_id FROM managment WHERE category_id = ? GROUP BY supplier ORDER BY supplier";

// 初始化预处理语句
$stmt = mysqli_prepare($connection, $sql);
// 绑定参数(i表示整数,s表示字符串,根据实际参数类型调整)
mysqli_stmt_bind_param($stmt, "i", $category_id);
// 执行查询
mysqli_stmt_execute($stmt);
// 获取结果集
$result = mysqli_stmt_get_result($stmt);

// 循环输出逻辑和之前一致
while ($row = mysqli_fetch_assoc($result)) {
    // 输出内容
}

额外提示

  • 用htmlspecialchars()输出内容可以防止XSS攻击,这是前端输出的最佳实践
  • 如果只是想查询单个供应商的总额,可以去掉GROUP BY,直接用SELECT SUM(dues) FROM managment WHERE supplier = ?

内容的提问来源于stack exchange,提问作者Hamza Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:15:15