gpt4 book ai didi

mysql - 循环表中数字列的总计(不是查询的总计)

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

预先感谢您提供详细的帮助和回复。

几周来我一直为这个问题难过。一直在网上研究,无法弄清楚。请帮忙。

重要的是要注意 - 我试图获取总数的列未存储在我的 sql 数据库中。 SELECT SUM 不适用于此。我也宁愿不将 SUBTOTAL 列写入 sql - 因为如果我需要更改时间或费率(如果有笔误),我宁愿只更改 1 个字段,而不是 2 个。

这是我的表的样子,由 sql 查询填充: table looks like

在表格显示TOTAL 的地方,我需要它来将其上方的列相加并填充总数。

这是我的代码 - 它很长,因为我包含了所有内容,以备不时之需。

$staffquery = mysqli_query($con, "SELECT * FROM kmis_transcribers WHERE transcriber_projectid = '$projectinvoiceid ' ORDER BY transcriber_calltime ASC");

$staffcount = mysqli_num_rows($staffquery);
for($i=0; $i<$staffcount; $i++) {
$staffarray = mysqli_fetch_array($staffquery);
$staffid = $staffarray['transcriber_id'];
$staffregid = $staffarray['transcriber_registryid'];
$staffposition = $staffarray['staff_position'];
$staffcalltime = $staffarray['transcriber_calltime'];
$staffrate = $staffarray['staff_rate'];
$staffhours = $staffarray['transcriber_hours'];
$staffovertime = $staffarray['transcriber_overtime'];


echo('<tr>

<td align="center" style="border:1px solid #000000; padding:3px">$'.$staffrate.'</td>
<td align="center" style="border:1px solid #000000; padding:3px">');

$invoicequery = mysqli_query($con, "SELECT * FROM kmis_invoices WHERE invoice_staffid='$staffid'");
while ($invoicearray = mysqli_fetch_array($invoicequery)) {
echo(''.$invoicearray['invoice_hours'].'');
}
echo('</td>
<td align="center" style="border:1px solid #000000; padding:3px">');

$invoicequery = mysqli_query($con, "SELECT * FROM kmis_invoices WHERE invoice_staffid='$staffid'");
while ($invoicearray = mysqli_fetch_array($invoicequery)) {
echo(''.$invoicearray['invoice_overtime'].'');
}
echo('</td>
<td align="center" style="border:1px solid #000000; padding:3px">');

$invoicequery = mysqli_query($con, "SELECT * FROM kmis_invoices WHERE invoice_staffid='$staffid'");
while ($invoicearray = mysqli_fetch_array($invoicequery)) {
$invoicehours= $invoicearray['invoice_hours'];
$invoiceovertime= $invoicearray['invoice_overtime'];

$subtotal = ($invoicehours*$staffrate)+($invoiceovertime*$staffrate*1.5);
$subtotalformat = number_format((float)$subtotal, 2, '.', '');

echo('$'.$subtotalformat.'');
}
echo('</td>
</tr>');
}
echo('<tr>
<td align="center" style="border:1px solid #000000; padding:3px"></td>
<td align="right" style="border:1px solid #000000; padding:3px" colspan="4"><b>TOTAL DUE:</b></td>
<td align="center" style="border:1px solid #000000; padding:3px"><b>TOTAL</b></td>
</tr>

您可以看到我用来创建小计列的公式使用了四个不同的查询——来自发票和员工。有些员工有不同的费率,因此小计是基于行与行之间可能完全不同的数据。

我认为答案在于 array_sum 并在填充时使用数组来保存所有 $subtotal 但我完全被难住了。

真诚地感谢您。如果您需要我澄清或帮助使其更精确,请告诉我。

最佳答案

我已经通读了你的问题。这个问题对我来说似乎很简单,但你的代码都搞砸了。我的理解是你的total 将是所有小计值的总和,所以

Total= 40$ + 108$ = 148$ //from your shown data in fig

在你的for循环之外初始化一个变量$total

  $total=0;
for($i=0; $i<$staffcount; $i++) {

计算完小计后,将其添加到总计中,如下所示

$subtotal = ($invoicehours*$staffrate)+($invoiceovertime*$staffrate*1.5);
$total=$total + $subtotal;
$subtotalformat = number_format((float)$subtotal, 2, '.', '');

最后把计算出的$total的值放在结果中作为

 echo('<tr>
<td align="center" style="border:1px solid #000000; padding:3px"></td>
<td align="right" style="border:1px solid #000000; padding:3px" colspan="4"><b>TOTAL DUE:</b></td>
<td align="center" style="border:1px solid #000000; padding:3px"><b>TOTAL : '.$total.'</b></td>
</tr>

您的 php 代码看起来很长而且乱七八糟,所以我建议您尝试使用此查询来缩短它。

SELECT 
t1.transcriber_id staff,
t1.staff_position position,
t1.staff_rate Rate,
t2.invoice_hours hours,
t2.invoice_overtime 'OT x 1.5',
(t2.invoice_hours * t1.staff_rate) + (t2.invoice_overtime * t1.staff_rate * 1.5) subtotal
FROM
kmis_transcribers t1
JOIN
kmis_invoices t2 ON (t1.transcriber_id = t2.invoice_staffid)
WHERE
t1.transcriber_projectid=1 //$projectinvoiceid in your case

上面的查询将返回您想要的 View ,您的 PHP 代码现在将变得非常简单,而不是四个查询,您只需要一个查询。

关于mysql - 循环表中数字列的总计(不是查询的总计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39672344/

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