現時点では、注文が完全に支払われたかどうかを確認する関数を作成しました。この関数では、2 番目の関数を使用して合計注文価格を決定します。最初の関数では、合計注文価格が注文のすべてのトランザクションと比較され、それに基づいて、注文が支払われるかどうかが決定されます。
言及された機能の下。私が探しているのは、関数を単一のクエリに変更できる方法です。何かのようなもの:
SELECT *
FROM order
WHERE
((Grandtotal - TransactionTotal) <= 0)
そのため、クエリは、たとえば、支払われている場合は true、支払われていない場合は false を返します。
関数 IsOrderPayd:
function IsOrderPaid($order_id){
$returnvalue = false;
$ordertotal = CalculateOrderTotal($order_id);
$sql = "SELECT SUM(amount) AS TransactionTotal FROM order_transaction WHERE order_id='".mysql_real_escape_string($order_id)."' AND status='9'";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_object($result);
if(($ordertotal - $row->TransactionTotal) <= 0 ){
$returnvalue = true;
}
return $returnvalue;
}
関数 CalculateOrderTotal
function CalculateOrderTotal($order_id){
$sql = "SELECT
order_id, SUM(total) GrandTotal
FROM
(
SELECT ordering_id AS order_id, SUM(price * quantity) AS total
FROM order_products
WHERE order_id = ".mysql_real_escape_string($order_id)."
UNION ALL
SELECT ordering_id AS order_id, SUM(price * quantity * -1) AS total
FROM rma_products
WHERE bestelling_id = ".mysql_real_escape_string($order_id)."
UNION ALL
SELECT order_id, amount AS total
FROM order_shipping
WHERE order_id = ".mysql_real_escape_string($order_id)."
UNION ALL
SELECT order_id, amount AS total
FROM order_service
WHERE order_id = ".mysql_real_escape_string($order_id)."
UNION ALL
SELECT order_id, SUM(amount * -1) AS total
FROM order_gift
WHERE order_id = ".mysql_real_escape_string($order_id)."
)subTable
WHERE order_id <> 0
GROUP BY order_id";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_object($result);
return $row->GrandTotal;
}
mysql_*
非推奨であることは知っていますが、それは次の問題です。