2016-04-26 2 views
1

У меня есть 3 проекта, времени и расходов. Я хочу объединить все 3 из них и рассчитать сумму, а также получить все соответствующие записи.Php, MySql объединить 3 таблицы и рассчитать SUM

Вот мои таблицы:

projects: 
id  name 
===================== 
1  First Project 
2  Second Project 

times: 
id  project_id hours  billed 
=================================================== 
1  1   2.0   1 
2  1   3.0   0 
3  2   4.30  0 

expense: 
id  project_id amount   billed 
================================================== 
1  1   120.00   0 
2  2   35.00   1 
3  2   55.00   0 
4  2   45.00   0 

и вот мой запрос:

SELECT 
    SUM(t.hours) as total_hours, 
    SUM(e.amount) as total_amount, 
    p.name 
    FROM 
    `projects` AS p 
    LEFT JOIN `expense` AS e 
     ON e.project_id = p.id 
    LEFT JOIN `times` AS t 
     ON t.project_id = p.id 
    WHERE t.billed = 0 
    AND e.billed = 0 
    GROUP BY p.id; 

Но по какой-то причине я не могу заставить ее работать, я в конечном итоге нет записей.

Результат должен выглядеть примерно так:

Name   Total Hours  Total Expense 
============================================== 
First Project 3.00    120.00 
---------------------------------------------- 
Second Project 7.30    100.00 
---------------------------------------------- 

ответ

0

Вы просто таблица псевдонимами неправильный путь вокруг:

SELECT 
    SUM(e.hours) as total_hours, 
    SUM(t.amount) as total_amount, 
    p.name 
    FROM 
    `projects` AS p 
    LEFT JOIN `expense` e 
     ON e.project_id = p.id 
    LEFT JOIN `times` t 
     ON t.project_id = p.id 
    WHERE t.billed = 0 
    AND e.billed = 0 
    GROUP BY p.id; 

Работы, как и ожидалось: http://sqlfiddle.com/#!9/48bfd1/3

+0

Это действительно INNER JOIN и, как EXPLAIN EXTENDED, за которым следует SHOW WARNINGS. – Strawberry

+0

@colburton Алиасы на самом деле правильные, это была опечатка с именами таблиц. Я обновил свой пост. – Alko

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