我有两张桌子: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然后减去。
有什么建议吗?
答案 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
答案 1 :(得分:0)
使用
替换SQL语句和减法行中的checkMtr
SUM(checkMtr)
它会起作用。
答案 2 :(得分:0)
如果我理解正确,您希望checkMtr是一个减去的单个数字吗?
这将添加所有checkMtr结果并输出该总和。
SELECT sum(checkMtr) FROM bill WHERE contId = '25'
如果从用户提交contId,我希望您正在验证数据