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

按员工ID关联工时与时薪并计算总人工成本的技术问题

解决方案

方案一:用SQL直接完成计算(推荐)

数据库擅长处理关联与聚合计算,直接通过JOIN关联两张表并完成总和计算,性能更优。注意需先给table1按员工ID分组,确保每个员工的工时单独统计:

SELECT SUM(t1.Hora * t2.Coste) AS TotalCoste
FROM (
    -- 按员工分组统计工时
    SELECT Id_Persona, (SUM(Horas) * 3600)/36000000 AS Hora 
    FROM table1
    GROUP BY Id_Persona
) t1
-- 通过员工ID关联时薪表
INNER JOIN table2 t2 ON t1.Id_Persona = t2.Id_CostPers

对应的PHP代码可简化为:

$totalQuery = $DB->Sql("SELECT SUM(t1.Hora * t2.Coste) AS TotalCoste FROM (SELECT Id_Persona, (SUM(Horas)*3600)/36000000 as Hora FROM table1 GROUP BY Id_Persona) t1 INNER JOIN table2 t2 ON t1.Id_Persona = t2.Id_CostPers");
$totalResult = $DB->Row($totalQuery);
$total4 = $totalResult->TotalCoste;
echo $total4;

方案二:修改PHP代码关联ID计算

如果必须在PHP层处理数据,需先将两个查询结果按员工ID存入关联数组,再遍历完成计算:

  1. 修正数据存储逻辑,用员工ID作为键存储每个员工的工时和时薪:
// 存储员工工时,键为员工ID
$suma1 = [];
while($totalSumaHoras = $DB->Row($SumaHoras)){                                      
    $suma1[$totalSumaHoras->Id_Persona] = $totalSumaHoras->Hora;
}

// 存储员工时薪,键为员工ID
$suma2 = [];
while($totalSumaCoste = $DB->Row($SumaCosteHora)){
    $suma2[$totalSumaCoste->Id_CostPers] = $totalSumaCoste->Coste;
}
  1. 遍历数组,通过ID关联计算总费用:
$total4 = 0;
foreach($suma1 as $personaId => $hora){
    // 确保该员工存在对应的时薪记录
    if(isset($suma2[$personaId])){
        $total4 += $hora * $suma2[$personaId];
    }
}

echo $total4;

原代码问题说明

  • 原table1的SQL查询未按Id_Persona分组,会将所有员工的工时合并为一条记录,无法获取单个员工的工时数据。
  • while循环中直接覆盖变量suma1和suma2,最终仅保留最后一条查询结果,而非所有员工的数据。
  • 未通过员工ID关联两个数据集,无法对应到每个员工的工时与对应时薪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:30:59