2013-03-20 4 views
2

На данный момент я написал функцию, чтобы проверить, полностью ли оплачен заказ. В функции вторая функция используется для определения общей цены заказа. В первой функции общая стоимость заказа сравнивается со всеми транзакциями заказа, и на основании этого заказ оплачивается или нет.Сделать запрос от функции

Нижеперечисленные функции. Я ищу способ, которым я могу изменить функцию на один запрос. Кое-что вроде:

SELECT * 
FROM order 
WHERE 
    ((Grandtotal - TransactionTotal) <= 0) 

Так что запрос возвращает, например, true, если оплачен, false, если не оплачен.

функция IsOrderPaid:

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_* осуждается, но это следующий вопрос.

+1

Почему бы вам не сделать две функции mysql и использовать их – user991554

+0

Окончательный Я хочу использовать результат этого запроса в другом запросе. Теперь я выполняю свой первый запрос, в то время как я делаю вызов функции. Исходя из результата, я заполняю массив всеми заказами, которые мне нужны. – Timo002

ответ

0

Это похоже на вопрос SQL. Похоже, вы хотите получить итоговые суммы для своего заказа, а затем вычесть сумму транзакции для определения того, заплатили ли они полностью. Вы можете сделать это:

где $ 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 в качестве примера), но вы может сделать то же самое для and order_shipping, а остальное.

На вашем PHP вы получите все свои итоговые значения, и вы можете делать там свои сравнения (только из одного запроса).