2016-04-26 12 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

これらは内部結合実際にあります、 EXPLAIN EXTENDEDの後にSHOW WARNINGSが続きます。 – Strawberry

+0

@colburtonエイリアスは実際には正しいです、それはテーブル名のタイプミスです。私は自分の投稿を更新しました。 – Alko

関連する問題