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

如何基于关联字段从数据表获取多值并计算金额总和?

解决多值分类代码的金额求和问题

首先看你的代码,核心问题出在SQL语句的IN子句部分——你直接把逗号分隔的字符串PF,HM,BP,TX放进去,数据库会把这些值当成列名而非字符串常量,这会导致语法错误或者完全不符合预期的结果。另外,为了避免SQL注入风险,也需要对每个分类代码做转义处理。

下面是修正后的完整代码,我会拆解关键步骤说明:

include "../db.php";

// 建议加上WHERE条件,明确获取permanent分组的记录(避免拿到多条结果)
$a = "Select payroll_cat_name from table_2 WHERE group_name = 'permanent'";
$b = mysqli_query($con, $a);
$c = mysqli_fetch_array($b);
$d = $c["payroll_cat_name"];

// 把逗号分隔的字符串拆成数组
$myArray = explode(',', $d);

// 处理每个分类代码:转义+包裹单引号,同时去除可能的空格
$escapedCodes = array_map(function($code) use ($con) {
    return "'" . mysqli_real_escape_string($con, trim($code)) . "'";
}, $myArray);

// 把处理后的数组拼接成IN子句需要的格式
$codesStr = implode(',', $escapedCodes);

// 执行求和查询
$tr = "SELECT SUM(amount) as am FROM table_1 WHERE category_code IN ($codesStr)";
$rt = mysqli_query($con, $tr);
$new = mysqli_fetch_array($rt);
$gh = $new["am"];

// 输出计算结果
echo "总金额:" . $gh;

关键修正说明:

  • 给字符串值加单引号:每个分类代码都是字符串类型,必须用单引号包裹,数据库才会把它们当成字符串值处理,而不是列名。
  • SQL注入防护:用mysqli_real_escape_string对每个代码转义,防止恶意输入破坏SQL语句,这是数据库操作的基础安全习惯。
  • 去除多余空格:如果原始字符串里有空格(比如PF , HM),trim能避免因空格导致的匹配失败。
  • 明确查询条件:原代码没加WHERE,如果table_2有多条记录,mysqli_fetch_array只会取第一条,加上条件能确保拿到你需要的目标分组数据。

另外注意:TX在table_1中没有对应记录,SUM()函数会自动忽略不存在的条目,最终结果会是1000 + 12000 + 35000 = 48000,符合预期。

内容的提问来源于stack exchange,提问作者pal deepak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:12:11