2011-03-08 130 views
1

我一直在這工作了兩天,無法得到它,我需要一些幫助。問題與SUM加倍結果

目標 - 別的不說......

  • SUM所有項目的時間表項
  • SUM所有項目發票

集團通過這些項目(專案編號),並顯示在一個表。

在與上述表格相同的頁面中,有一種表格允許用戶輸入新的時間表條目。刷新時,運行和表格顯示更新的時間表總數。

當前情況 - 提交時間表格(例如:項目X爲1.25小時)時,發生三件事。

  1. 表單數據發佈到數據庫。這工作完美。數據輸入完全是應該的。
  2. 頁面刷新和項目X的時間表條目更新2.5小時(應該增加1.25)
  3. 發票總額也會增加該項目的總髮票金額。即如果爲項目X開發了5000美元,那麼添加一個新的時間表條目將推動該項目達到10000美元和15000美元......等等。

查詢 - 如下:

<?php 
    $query = "SELECT tsm_projects.projectName AS projectName, tsm_projects.projectID AS projectID, tsm_projects.value AS value, tsm_projects.estHours AS estHours, tsm_clients.clientName AS clientName, tsm_projects.estHours - SUM(tsm_timesheets.time) AS remaining, SUM(tsm_invoices.invoiceValue) AS invoiceValue, SUM(tsm_timesheets.time) AS totalTime FROM tsm_projects 
    LEFT JOIN tsm_timesheets ON tsm_projects.projectID = tsm_timesheets.projectID 
    LEFT JOIN tsm_clients ON tsm_clients.clientID = tsm_projects.clientID 
    LEFT JOIN tsm_invoices ON tsm_invoices.projectID = tsm_projects.projectID 
    WHERE projectType = 'active' 
    GROUP BY tsm_timesheets.projectID 
    ORDER BY tsm_projects.projectName"; 
    $result = mysql_query($query) or die(mysql_error()); 
    while($row = mysql_fetch_array($result)){ 
    echo "<tr><td>". $row['projectName'] . " [" . $row['clientName'] . "]</td><td>$" . number_format($row[value], 2, '.', ',') . " [" . $row['estHours'] . "]</td><td>$" . $row['invoiceValue'] . "</td><td>" . number_format($row[totalTime], 2, '.', ',') ." ["; 
    if($row["remaining"] <= 0) { 
    echo "<span class=\"redText\">" . $row['remaining'] . "</span>"; } 
    else { 
    echo "<span class=\"greenText\">+" . $row['remaining'] . "</span>"; } 
    echo "]</td></tr>"; } 
?> 

SQL - 我猜時間表和/ orinvoicing表很可能相關:

TABLE `tsm_timesheets` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `projectID` varchar(10) NOT NULL, 
    `activity` varchar(20) NOT NULL, 
    `date` date NOT NULL, 
    `time` decimal(4,2) NOT NULL, 
    `timesheetID` varchar(10) NOT NULL, 
    `memberID` varchar(20) NOT NULL, 
    PRIMARY KEY (`id`) 
) 

TABLE `tsm_invoices` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `projectID` varchar(10) NOT NULL, 
    `month` varchar(15) NOT NULL, 
    `notes` varchar(255) NOT NULL, 
    `invoiceValue` decimal(10,2) NOT NULL DEFAULT '0.00', 
    `gstValue` decimal(10,2) NOT NULL DEFAULT '0.00', 
    `fee` decimal(6,2) NOT NULL DEFAULT '0.00', 
    `costs` decimal(6,2) NOT NULL DEFAULT '0.00', 
    `invoiceNumber` varchar(15) NOT NULL, 
    `dateSent` date NOT NULL, 
    `dateDeposit` date NOT NULL, 
    `dateAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `addedBy` varchar(20) NOT NULL, 
    `invoiceID` varchar(10) NOT NULL, 
    PRIMARY KEY (`id`) 
) 

希望有人可以提供幫助。提前致謝。

rrfive

回答

1

聚合函數計算上不每個表列每結果行的基礎。

您需要執行單獨分組:

LEFT JOIN (
    SELECT projectID, SUM(invoiceValue) AS SumInvoiceValue 
    FROM tsm_invoices 
    GROUP BY projectID) i ON i.projectID = tsm_projects.projectID 

整個查詢:

SELECT p.projectName AS projectName, p.projectID AS projectID, p.value AS value, 
    p.estHours AS estHours, c.clientName AS clientName, 
    p.estHours - t.SumTime AS remaining, 
    i.SumInvoiceValue AS invoiceValue, 
    t.SumTime AS totalTime 
FROM tsm_projects p 
    LEFT JOIN tsm_clients c ON c.clientID = p.clientID 
    LEFT JOIN (
     SELECT projectID, SUM(time) AS SumTime 
     FROM tsm_timesheets 
     GROUP BY projectID 
    ) t ON p.projectID = t.projectID 
    LEFT JOIN (
     SELECT projectID, SUM(invoiceValue) AS SumInvoiceValue 
     FROM tsm_invoices 
     GROUP BY projectID 
    ) i ON i.projectID = p.projectID 
WHERE projectType = 'active' 
GROUP BY p.projectID 
ORDER BY p.projectName 
+0

你解決我的問題,教我一些東西的過程中。謝謝。非常感激。 – rrfive 2011-03-08 08:47:42