2

現時点では、注文が完全に支払われたかどうかを確認する関数を作成しました。この関数では、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_*非推奨であることは知っていますが、それは次の問題です。

4

1 に答える 1

0

これはSQLの質問のようです。注文の合計を取得し、トランザクションの合計を差し引いて、全額が支払われたかどうかを判断したいようです。あなたはこれができますか:

$id = ご注文 ID...

SELECT 
sum(op.price * op.quantity) as order_products_total,
sum(rma.price * rma.quantity) as rma_total,
FROM order 
left join order_products op on ordering_id = order.order_id 
left join rma_products rma on ordering_id  = order.order_id 
WHERE
order.order_id = $id 

すべてのleft joinテーブルに対してこれを行うことができます (例として order_products と rma_products のみを行いました) が、order_shipping と残りに対しても同じことができます。

PHP では、すべての合計を取得し、そこで (1 つのクエリから) 比較ステートメントを実行できます。

于 2013-03-20T13:22:09.213 に答える