提前感谢您提供详细的帮助和回复。
我已经被困了几个星期了。一直在线研究,无法弄清楚这一点。请帮忙。
重要的是要注意 - 我试图获得总数的列不存储在我的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 ,并且当他们填充时使用数组来保存所有$小计,但我完全难倒了。
真诚地感谢你。如果您需要我澄清或帮助使其更精确,请告诉我。
答案 0 :(得分:2)
我已经阅读了你的问题。这个问题对我来说似乎很简单,但是你的代码都搞砸了。我明白你的总数将是所有小计值的总和,所以< / p>
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
上面的查询将返回您想要的视图,现在您的PHP代码将变得非常简单,而不是只需要一个查询的四个查询。