从一个表中添加多个字段的值,并将其从php中的另一个表中减去一个字段

时间:2013-04-05 23:19:47

标签: php addition subtraction

我有两张桌子:contract bill
contract表包含以下字段(contId(PK),contractNumber,quantity等)。
bill包含以下字段(billId(PK),billNo,contId,checkMtr等...)。

这里每份合约都有多张账单。我要做的是add合同的所有inwMtr,并从quantity中扣除,并将最终的mtrs显示为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然后减去。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

$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

SQLFIDDLE

答案 1 :(得分:0)

使用

替换SQL语句和减法行中的checkMtr
SUM(checkMtr)

它会起作用。

答案 2 :(得分:0)

如果我理解正确,您希望checkMtr是一个减去的单个数字吗?

这将添加所有checkMtr结果并输出该总和。

SELECT sum(checkMtr) FROM bill WHERE contId = '25'

如果从用户提交contId,我希望您正在验证数据