我正試圖實作一個客戶的所有訂單的總和。 我已經創建了一個SQL函式來計算一個給定訂單的金額:
DELIMITER $$
創建 函式 invoices.orderAmount(數量INT, 價格INT) RETURNS INT, price INT.
BEGIN BEGIN
DECLARE orderTotal INT;
SET orderTotal = quantity * price;
RETURN orderTotal;
END$$
DELIMITER ;
在試圖保存這個函式時,我得到了這個錯誤。
現在我想用一個命令來獲得所有客戶訂單的總和,例如:
$totalOrder()
$totalOrderQuery =" SELECT price, quantity, sum(invoices.orderAmount(price,quantity)) AS CustomersTotalBill FROM invoices WHERE purchaseId=$purchaseId AND status='ordered' AND OrderCancel='NO'";
uj5u.com熱心網友回復:
- 對于這樣一個簡單的操作來說,使用一個存盤函式似乎有些矯枉過正。
- 你在呼叫你的函式時顛倒了引數 。
- 你在 SELECT 陳述句中缺少一個結尾括號 。
- 你的SELECT中的
price和quantity列是沒有意義的,因為SUM將導致結果被分組。 - 你沒有指定一個 "GROUP BY",所以所有的結果都會在一行中。使用GROUP BY,按客戶ID分組 。
你應該可以這樣做:
你應該可以這樣做。
SELECT SUM(invoices.orderAmount( quantity,price)) AS CustomersTotalBill FROM invoices WHERE purchaseId=: PurchaseID AND status='ordered' AND OrderCancel='NO'
GROUP BY invoices.customerid
(假設你有一個customerid列來識別客戶)
編輯:原來的建議洗掉了函式呼叫,并且沒有使用GROUP BY:
SELECT SUM(price * quantity) AS CustomersTotalBill FROM invoices WHERE purchaseId=: PurchaseID AND status='ordered' AND OrderCancel='NO'
使用準備好的陳述句來為PurchaseID提供值。 如果使用PDO:
$stmt = $pdo->/span>prepare($QUERY)。
$stmt-> execute([ 'PurchaseID' =>/span> $purchaseId ])。
uj5u.com熱心網友回復:
你的錯誤資訊告訴你哪里出了問題
把函式改為DELIMITER $$
CREATE FUNCTION invoices.orderAmount( quantity INT, price INT) RETURNS INT, price INT.
DETERMINISTICBEGIN BEGIN
DECLARE orderTotal INT;
SET orderTotal = quantity * price;
RETURN orderTotal;
END$$
DELIMITER ;
但在你的php代碼中只使用帶引數的prepare陳述句。見如何在PHP中防止SQL注入?
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/306795.html
標籤:
上一篇:<SKPaymentQueue:0x281194d90>。支付完成,有錯誤。錯誤Domain=ASDErrorDomainCode=500"未處理的例外"
