2013-09-25 3 views
2

У меня есть три таблицы, таблица для пользователей, одна для заказов и последняя, ​​содержащая элементы заказа.Суммы в выражении объединения MySQL

Я создал SQL-запрос, который получает все заказы и присоединяет пользователя к результатам, теперь я хочу присоединиться к элементам заказа в запросе. Один заказ может иметь несколько предметов заказа. У каждой позиции заказа есть цена. Мне нужна сумма всех order_items, которая соответствует порядку_имя.

Так что получите результат, который выглядит следующим образом: ид, order_id, идентификатор пользователя, order_time, идентификатор, имя, адрес электронной почты, цена

Сейчас мой запрос выглядит следующим образом:

SELECT huxwz_user_orders.*, huxwz_users.name, huxwz_users.email, huxwz_users.id, SUM(huxwz_user_orderitems.price) 
FROM huxwz_user_orders 
LEFT OUTER JOIN huxwz_users ON (
    huxwz_user_orders.userid = huxwz_users.id 
) 
LEFT OUTER JOIN huxwz_user_orderitems ON (
    huxwz_user_orders.id = huxwz_user_orderitems.orderid 
) 

вещь SUM делает сумму всего заказа, что означает, что я получаю только один результат:/

Любые идеи о том, как я мог это исправить?

+3

вам нужно иметь предложение GROUP BY. –

+1

Можете ли вы показать мне, я немного смущен относительно того, где его разместить: Jazerix

+0

Вот документация об использовании Group By: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html – Robbert

ответ

1
SELECT huxwz_user_orders.*, huxwz_users.name, huxwz_users.email, huxwz_users.id, SUM(huxwz_user_orderitems.price) 
FROM huxwz_user_orders 
LEFT OUTER JOIN huxwz_users ON (
    huxwz_user_orders.userid = huxwz_users.id 
) 
LEFT OUTER JOIN huxwz_user_orderitems ON (
    huxwz_user_orders.id = huxwz_user_orderitems.orderid 
) 
Group BY huxwz_user_orderitems.orderid 
ORDER BY huxwz_user_orders.id 

Я сделал это, и он видит ms отлично, как я хотел, спасибо за информацию группировки, это работает! : 3

+0

Если другие не ответили на ваш вопрос, но у вас есть - вы можете принять этот ответ. В противном случае рекомендуется сделать это обновлением вашего вопроса и принять ответ, который помог самому. – Orbling

+0

Привет, Орбинг, я хотел сделать это ответом, но stackoverflow говорит, что я должен ждать два дня :) – Jazerix

0

Вы используете оракул?

Если да, то это может быть то, что вы хотите:

SUM(huxwz_user_orderitems.price) OVER (PARTITION BY huxwz_user_orderitems.orderid) 

Если нет, то я думаю, вам придется сделать выбор из всех позиций заказа, отборный со все итогами за заказ (группа по) и присоединиться к этим двум наборам результатов.

SELECT a.*, b.total 
FROM 
(SELECT huxwz_user_orders.*, huxwz_users.name, huxwz_users.email, huxwz_users.id 
FROM huxwz_user_orders 
LEFT OUTER JOIN huxwz_users ON (
    huxwz_user_orders.userid = huxwz_users.id 
) 
LEFT OUTER JOIN huxwz_user_orderitems ON (
    huxwz_user_orders.id = huxwz_user_orderitems.orderid 
) 
) a, 
(
SELECT o.id, SUM(oi.price) total 
FROM huxwz_user_orders o, 
JOIN huxwz_user_orderitems oi ON o.id = oi.orderid 
GROUP BY o.id 
) b 
0

Вы должны удалить звездочку с вашего выбора, а затем положить GROUP BY, как это:

SELECT huxwz_user_orders.field1, huxwz_users.name, huxwz_users.email, huxwz_users.id, 
SUM(huxwz_user_orderitems.price) 
FROM huxwz_user_orders 
LEFT OUTER JOIN huxwz_users ON (
    huxwz_user_orders.userid = huxwz_users.id 
) 
LEFT OUTER JOIN huxwz_user_orderitems ON (
    huxwz_user_orders.id = huxwz_user_orderitems.orderid 
) 
GROUP BY huxwz_user_orders.field1, huxwz_users.name, huxwz_users.email, huxwz_users.id 

или, возможно, это будет проще для вас, чтобы использовать вложенный запрос:

SELECT huxwz_user_orders.field1, huxwz_users.name, huxwz_users.email, huxwz_users.id, 
(SELECT SUM(price) FROM huxwz_user_orderitems WHERE huxwz_user_orders.id = orderid) AS price 
FROM huxwz_user_orders 
LEFT OUTER JOIN huxwz_users ON (
    huxwz_user_orders.userid = huxwz_users.id 
) 
0
SELECT huxwz_user_orders.*, huxwz_users.name, huxwz_users.email, huxwz_users.id, SUM(huxwz_user_orderitems.price) 
FROM huxwz_user_orders 
LEFT OUTER JOIN huxwz_users ON (
    huxwz_user_orders.userid = huxwz_users.id 
) 
LEFT OUTER JOIN huxwz_user_orderitems ON (
    huxwz_user_orders.id = huxwz_user_orderitems.orderid 
)GROUP BY 
huxwz_users.name, huxwz_users.email, huxwz_users.id 
Смежные вопросы