0

我有两张桌子:contract bill
contract表包含以下字段(contId (PK)、contractNumber、数量等)。
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 然后减去。

有什么建议么?

4

3 回答 3

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

于 2013-04-05T23:33:35.020 回答
0

checkMtr在 SQL 语句和减法行中都替换为

SUM(checkMtr)

它会起作用。

于 2013-04-05T23:33:52.113 回答
0

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

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

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

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

于 2013-04-05T23:33:54.143 回答