0

2 つのテーブルがありますcontract bill
contractテーブルには、次のフィールド (contId (PK)、contractNumber、数量など) が含まれています。
bill次のフィールドが含まれます (billId (PK)、billNo、contId、checkMtr など...)。

ここでは、すべての契約に複数の請求書を含めることができます。私がやろうとしているのは、契約のaddすべてであり、それを から差し引き、最終的な mtrs を Pending Mtr として表示します。inwMtrquantity

これが私が試したことです:

<?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 を引きますが、すべての請求書に対して行います。すべての請求書のチェックメーターを加算してから減算するわけではありません。

助言がありますか?

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最初のクエリの後のループも必要ありません。主キーで行を選択しているため、複数の行を返すことはできません。

これを 1 つのクエリに結合することもできます。

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

checkMtrSQL ステートメントと減算行の両方を次のように置き換えます。

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 に答える