[英]Add values of multiple fields from one table and subtract it to a field from another table in php
我有两张桌子: contract
bill
。
contract
表包含以下字段(contId(PK),contractNumber,数量等。)。
bill
包含以下字段(billId(PK),billNo,contId,checkMtr等)。
在这里,每个合同可以有多个账单。 我想做的是add
合同的所有inwMtr
并从quantity
扣除,然后将最终的inwMtr
显示为Pending Mtr。
这是我尝试过的:
<?php
include("dbconnection.php");
$sql1 = mysql_query("SELECT quantity FROM contract WHERE contId = '25'");
while($result1 = mysql_fetch_array($sql1))
{
//echo "$result1[quantity]";
//echo "<br/>";
//echo "<br/>";
$sql2 = mysql_query("SELECT checkMtr FROM bill WHERE contId = '25'");
while($result2 = mysql_fetch_array($sql2))
{
//echo "$result2[checkMtr]";
//echo "<br/>";
$a = $result1['quantity'] - $result2['checkMtr'];
echo "$a";
echo "<br/>";
}
echo "<br/>";
}
echo "<br/>";
?>
在这里,它的确从数量中减去了checkMtr,但它对每张账单都这样做。 它不会添加所有账单的checkmtrs,然后减去。
有什么建议么?
$sql2 = mysql_query("SELECT sum(checkMtr) checkMtr FROM bill WHERE contId = '25'");
if (mysql_num_rows($sql2) == 1) {
$result2 = mysql_fetch_array($sql2);
$a = $result1['quantity'] - $result2['checkMtr'];
} else {
$a = $result1['quantity'];
}
echo $a;
在第一个查询之后也不需要while
循环。 由于您要通过主键选择该行,因此它永远不能返回多于一行。
您还可以将其合并为一个查询:
SELECT quantity - ifnull(sum(checkMtr), 0) result
FROM contract c
LEFT JOIN bill USING (contId)
WHERE c.contId = '25'
为此,请使用GROUP BY
:
SELECT c.contId, quantity - ifnull(sum(checkMtr), 0) result
FROM contract c
LEFT JOIN bill USING (contId)
GROUP BY c.contId
将SQL语句和减法行中的checkMtr
替换为
SUM(checkMtr)
它会工作。
如果我理解正确,那么您希望checkMtr是一个被减去的数字吗?
这将添加所有checkMtr结果并输出该总和。
SELECT sum(checkMtr) FROM bill WHERE contId = '25'
另外,如果要从用户提交contId,我希望您正在验证数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.