2017-07-29 59 views
2

我想通過將購物車中每個產品的值相加來計算一個用戶購物車中的總產品。如何獲得數據庫中多列的Mysql SUM

我使用這個查詢:

SELECT *, SUM(quantity) OVER (PARTITION BY product_id ORDER BY id) AS TotalProducts 
    FROM cart WHERE user_id ='$user_id'; 

四處錯誤:

SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(PARTITION BY product_id ORDER BY id)

編輯與DB模式

id | product_id | quantity | user_id 
1 | 37   | 2  | 23847 
2 | 70   | 2  | 23847 

我看不到我做錯了什麼?

+1

'AS TotalProducts,'<<<刪除逗號一兩件事,這是一個錯字。 –

+0

@ Fred-ii-:逗號被刪除,仍然 –

回答

2

我不熟悉的MariaDB的語法,而你沒有表現出你的方案,但這裏是我在拍一個答案:

SELECT c.*, 
    SUM(c.quantity) as `TotalProducts` 
FROM cart c 
WHERE c.user_id = '$user_id' 
GROUP BY c.user_id 

或者,如果你想每個產品總,你可以使用:

SELECT c.*, 
    SUM(c.quantity) as `TotalProducts` 
FROM cart c 
WHERE c.user_id = '$user_id' 
GROUP BY c.user_id, c.product_id 
+0

這是正確的。 –

+0

很高興爲你效勞。感謝您接受它! –

1

在MySQL中,你可以使用相關子查詢:

SELECT c.*, 
     (SELECT SUM(c2.quantity) 
     FROM cart c2 
     WHERE c2.user_id = c.user_id AND 
       c2.product_id = c.product_id AND 
       c2.id <= c.id 
     ) as TotalProducts 
FROM cart c 
WHERE user_id = '$user_id'; 
+1

爲什麼不只是使用一組和?此外,還有一些小錯別字:'''產品''和'''AS''' –

+0

是的,你有錯別字。否則,該功能的作品,但我沒有得到正確的結果。用戶有2 X product_id = 37 + 2 X product_id = 70,我只得到2.我應該得到4. –

+0

@SebastianFarham。 。 。您的原始公式由'product_id'進行分區,它由此實現。如果你不打算這樣做,那麼問另一個問題,並提供樣本數據和期望的結果。 –