gpt4 book ai didi

php - 使用 PHP 对 MySQL 表中特定字段的总值进行求和,并以数组形式提取整行

转载 作者:行者123 更新时间:2023-11-29 15:09:24 25 4
gpt4 key购买 nike

我有一个 foreach 循环,它已经使用函数中的数据库对象样式查询从 MySQL 数据库表中提取所有行。该函数正在抓取所有字段并将其设置在一个数组中,例如 foreach ($blahs as $blah => $blah_data)现在,我可以使用出现的每一行的字段填充页面。所以这是有效的。

但是,我还需要更进一步,现在根据每次出现的关系 ID(例如用户 ID)和日期范围获取这些行,并据此计算出一些特定字段(例如 hours_worked)的总和。我正在考虑在该 foreach 中运行另一个 foreach 运行一个查询,将日期范围变量和 user_id 传递给不同的函数。

现在发生的情况是,它只是提取该行的第一次出现及其 hours_worked 字段,并将其输出为总计。如何让 php 根据 user_id 循环访问单个用户的行,并汇总要输出的特定字段?

例如 user_id 1 有 4 行数据,每个行数组的值为 1,4,9,2(每行以小时为单位) user_id 2 有 8 行数据,每个行数组的值为 4,2, 4,4,1,1,4,8。而不仅仅是显示用户 1 的“1”。或用户 2 的“4”。我需要用户 1 的 hours_worked 行总数为 16,用户 2 的 hours_worked 行总数为 28。

如何在已经运行的 foreach 循环中处理此问题以获得此数据?

还是我的做法全错了?

我确实忘记提及输出正在被格式化为数据网格以打印出月度报告。但其中大约 80% 是来自比 hell 更糟糕的地方的遗留暴行代码。因此,因为他们不想改变这一点,所以我必须解决所有这些问题,并且我需要永远详细说明这里的场景。

无论如何,这里是一些代码的片段,它给出了我想要做的事情的总体思路。主要需要注意的是,传入的数据已经被分解并分配给与传入字段同名的变量。$user_id 是“user_id”,$created_date 是“created_date”

我遇到了两个问题,1 直到外部 foreach 至少运行一次后,它似乎才运行,因此第一行会丢失一些通常来自总工作时间的数据例子。 2,它似乎只加载每次出现的第一行,所以我只得到“hours_worked”的第一个值,而不是总计。

$users = Users::getAllUsers();

foreach ($users as $user => $find_user)
{
$user_data = $find_user['user_obj']; //this is so all users can be listed on the datagrid at all times rather than only show up if date range/user_id matches. I have the query function assigning variables to the array items. (ex. $name prints the name at this point if I call it in the html table)

$tech_data = Maintenance::getTechDataByDateRangeAndUser($month, $year, $techs->uid ); //unlike the above that gets all, this one gets data by type "techs" in the query and then by specific user_id within a month year date range.

//all I want to do at this point is tally the 'hworked' field (pre-assigned as $hworked in the query function) for all rows occurring for each tech.
foreach ($tech_data as $data => $find_tech_data)
{
$worked_hours_total = 0;

$tech_occurrence = $find_tech_data['hused'];
$tech_occurrence_hours = $tech_occurrence;
$worked_hours_total += doubleval($tech_occurrence_hours);
}
$tech_hours = $worked_hours_total;

}
?>

最佳答案

我强烈怀疑您只需查询即可解决此问题。我不知道您的确切表/列名称,因此我将尝试一下。

SELECT u.*
, SUM(h.hours_worked)
FROM user u
LEFT JOIN hours h
ON u.user_id = h.user_id
GROUP BY u.user_id

您可以更进一步,为您的日期范围添加一个 where 子句。以六月为例

SELECT u.*
, SUM(h.hours_worked)
FROM user u
LEFT JOIN hours h
ON u.user_id = h.user_id
WHERE ( DATE(h.date) >= '2009/06/01' AND DATE(h.date) < '2009/07/01' )
GROUP BY u.user_id

关于php - 使用 PHP 对 MySQL 表中特定字段的总值进行求和,并以数组形式提取整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1229496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com