2016-04-26 12 views
1

Ich habe 3 Tabellen Projekt, Zeiten und Kosten. Ich möchte alle 3 von ihnen beitreten und Summe berechnen sowie alle übereinstimmenden Datensätze abrufen.PHP, MySql Join 3 Tabellen, und berechnen SUM

Hier sind meine Tabellen:

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 

und hier ist meine Frage:

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; 

Aber aus irgendeinem Grund kann ich nicht machen es zu arbeiten, habe ich am Ende ohne Datensätze auf.

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

Antwort

0

Sie müssen nur die Tabelle in die falsche Richtung Aliase um:

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; 

Arbeiten wie erwartet: http://sqlfiddle.com/#!9/48bfd1/3

+0

Diese sind wirklich INNER JOIN,

Das Ergebnis etwas aussehen sollte wie EXPLAIN EXTENDED gefolgt von SHOW WARNINGS würde demonstrieren. – Strawberry

+0

@colburton Die Aliase sind eigentlich korrekt, es war ein Tippfehler mit Tabellennamen. Ich habe meinen Beitrag aktualisiert. – Alko