2013-09-16 3 views
0

У меня есть следующий запрос:Как Итоговые результаты в запросе

SELECT cb.customers_id, cb.products_id, p.products_model, pd.products_name, cb.customers_basket_quantity, p.products_price, (p.products_price * cb.customers_basket_quantity) AS product_total 
    FROM customers_basket cb, products p, products_description pd 
    WHERE cb.customers_id =194075 
     AND cb.products_id = pd.products_id 
     AND p.products_id = pd.products_id 

Я пытаюсь выяснить, могу ли я получить «cart_total» без необходимости делать другой запрос, или использовать PHP, чтобы держать общая сумма.

Я не был уверен, могу ли я использовать оператор CASE, чтобы что-то сделать.

Предложения?

ответ

2
SELECT cb.customers_id, cb.products_id, p.products_model, pd.products_name, cb.customers_basket_quantity, p.products_price, (p.products_price * cb.customers_basket_quantity) AS product_total, 

(SELECT sum(p.products_price * cb.customers_basket_quantity) 
FROM customers_basket cb, products p 
WHERE cb.customers_id =194075 
AND cb.products_id = p.products_id 
group by cb.customers_id) AS cart_total 

FROM customers_basket cb, products p, products_description pd 
WHERE cb.customers_id =194075 
AND cb.products_id = pd.products_id 
AND p.products_id = pd.products_id 

Ссылка на Fiddle

+0

Это не работает. Столбец «cart_total» просто дает мне то же число, что и в «product_total» – Dizzy49

+0

@ Dizzy49 правильно! попробуйте обновленную версию выше. Я создал демо: http://sqlfiddle.com/#!3/1f391/1 (я не включил все поля в примеры - только те, которые имеют отношение к вопросу) – alfasin

0

Вы можете сделать тележку общего, но вы хотите, чтобы бросить некоторые из столбцов из group by и select (они не подходят на уровне корзины). Вы должны также использовать стандартный ANSI синтаксис объединения:

SELECT cb.customers_id, cb.customers_basket_quantity, 
     sum(p.products_price * cb.customers_basket_quantity) AS product_total 
FROM customers_basket cb join 
    products p 
    on cb.products_id = p.products_id join 
    products_description pd 
    on p.products_id = pd.products_id 
WHERE cb.customers_id = 194075 
GROUP BY cb.customer_basket_id; 

Информация на уровне продукта не имеет смысла на уровне корзины. Вы можете создавать списки наименований продуктов, используя, скажем:

group_concat(p.products_name) as Products_Name 

, но отдельные значения не имеют смысла.

0

Попробуйте это, вы получите итоговую сумму в последней строке запроса.

Все остальные столбцы будут пустыми.

SELECT cb.customers_id, 
     cb.products_id, 
     cb.customers_basket_quantity, 
     p.products_model, 
     p.products_price, 
     pd.products_name, 
     (p.products_price * cb.customers_basket_quantity) AS product_total, 
     null as cart_total 
    FROM products p 
     INNER JOIN customers_basket cb ON p.products_id = cb.products_id 
     INNER JOIN products_description pd ON pd.products_id = p.products_id 
    WHERE cb.customers_id = 194075 

union all 

SELECT null, null, null, null, null, null, null, 
     SUM(p.products_price * cb.customers_basket_quantity) AS cart_total 
    FROM products p 
     INNER JOIN customers_basket cb ON p.products_id = cb.products_id 
    WHERE cb.customers_id = 194075 

sample data

Смежные вопросы