2016-02-05 1 views
0

Мой запрос суммированием платы на основе ковшики таблицы (который находится в 3 части) результат должен быть 13 000, но я получаю 39000.Применить DISTINT на JOIN таблицы не работает

# Order table 

------------------------------------------- 
| Id | order    | Name | Fee | 
------------------------------------------- 
| 1 | SELECT STATEMENT | ab | 13000 | 
------------------------------------------- 

# Work table 
----------------------------- 
| Id | user id | order id | 
----------------------------- 
| 1 | 123 | 1  | 
| 2 | 123 | 1  | 
| 3 | 123 | 1  | 
----------------------------- 


# Query 
SELECT o.order_id, SUM(o.fee) AS total_words 
FROM users AS u 
LEFT JOIN works AS wr ON wr.user_id = u.id 
LEFT JOIN orders AS o ON o.order_id = wr.order_id 
    WHERE u.id = 123 

# Output =>  
Array 
(
    [order_id] => 1 
    [fee] => 39000 
) 

Я попытался DISTINCT и группы, но я получаю тот же результат.

+2

Ваш псевдоним таблицы перепутались. В какой таблице используется псевдоним 'a'? –

+0

Cheers @SameerMirji это 'user' as' u' – Fury

+0

Данные таблицы 'works' увеличивают ваши результаты, поскольку (user_id, order_id) не уникален. 'GROUP BY' помогла бы вам, если бы вы группировались на' work.id' – Uueerdo

ответ

1

SQL Fiddle Demo

SELECT `user_id`, SUM(orders.`Fee`) 
FROM (SELECT DISTINCT `user_id`, `order_id` 
     FROM works 
    ) as user_work 
JOIN orders 
    ON user_work.`order_id` = orders.`Id` 
WHERE user_work.user_id = 123 

ВЫВОД

| user_id | SUM(orders.`Fee`) | 
|---------|-------------------| 
|  123 |    13000 | 
+0

Привет, друг, и вот как вы это делаете – Fury