目前我已经编写了一个函数来检查订单是否已完全支付。在该函数中,第二个函数用于确定总订单价格。在第一个函数中,将总订单价格与订单的所有交易进行比较,并根据此决定是否支付订单。
在提到的功能下方。我正在寻找的是一种可以将函数更改为单个查询的方法。像这样的东西:
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_*
已被弃用,但这是下一个问题。
最佳答案
这似乎是一个 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 中,您会得到所有的总数,并且您可以在那里进行比较语句(仅通过一个查询)。
关于php - 从函数中查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15523075/