2014-11-05 36 views
0

我想以下列方式顯示捐贈數據,其中所有捐款總額將顯示在每個捐贈者下方。對於捐款的Mysql查詢給出了精確的總和,但不顯示所有事件

Johnny Cruz 
    Charity: Event 001 | Amount: US$ 100  
    Charity: Event 002 | Amount: US$ 30  
    Charity: Event 003 | Amount: US$ 90    
         Total : US$ 220 

Mike Polo 
    Charity: Event 002 | Amount: US$ 200  
    Charity: Event 004 | Amount: US$ 125  
         Total : US$ 325 

Donald Thomas 
    Charity: Event 005 | Amount: US$ 75 
         Total : US$ 75 

Thomas Stain 
    Charity: Event 002 | Amount: US$ 125 
    Charity: Event 003 | Amount: US$ 85 
         Total : US$ 210 

這是我目前正在使用的查詢。

SELECT *, SUM(amount) AS total_donation_per_donator FROM tr_donation WHERE ngopkid=1 GROUP BY donator ORDER BY donator ASC, event ASC 

上面的查詢給我的結果,我在下面提到。它爲每個捐贈者提供正確的捐贈總額,但只顯示一個事件。在查詢中需要做什麼更改才能獲得像上面提到的樣例結果?請幫忙。

Johnny Cruz 
    Charity: Event 001 | Amount: US$ 100  
         Total : US$ 220 

Mike Polo 
    Charity: Event 002 | Amount: US$ 200  
         Total : US$ 325 

Donald Thomas 
    Charity: Event 005 | Amount: US$ 75 
         Total : US$ 75 

Thomas Stain 
    Charity: Event 002 | Amount: US$ 125 
         Total : US$ 210 

這是表結構。

CREATE TABLE IF NOT EXISTS `tr_donation` (
    `pkid` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `ngopkid` bigint(20) unsigned NOT NULL DEFAULT '0', 
    `donator` varchar(100) NOT NULL DEFAULT '', 
    `eventpkid` bigint(20) unsigned NOT NULL DEFAULT '0', 
    `event` varchar(100) NOT NULL DEFAULT '', 
    `amount` float unsigned NOT NULL DEFAULT '0', 
    `postdate` datetime DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`pkid`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

---編輯---

如果我使用下面的查詢,它在以下方式給予的結果。

SELECT *, SUM(amount) AS total_donation_per_donator FROM tr_donation WHERE ngopkid=1 GROUP BY donator, event ORDER BY donator ASC, event ASC 

Johnny Cruz 
    Charity: Event 001 | Amount: US$ 100 
         Total : US$ 100 

    Charity: Event 002 | Amount: US$ 30  
         Total : US$ 30 

    Charity: Event 003 | Amount: US$ 90    
         Total : US$ 90 

Mike Polo 
    Charity: Event 002 | Amount: US$ 200 
         Total : US$ 200 

    Charity: Event 004 | Amount: US$ 125  
         Total : US$ 125 

Donald Thomas 
    Charity: Event 005 | Amount: US$ 75 
         Total : US$ 75 

Thomas Stain 
    Charity: Event 002 | Amount: US$ 125 
         Total : US$ 125 

    Charity: Event 003 | Amount: US$ 85 
         Total : US$ 85 
+0

GROUP BY捐贈者,事件(但你必須要總結您的行可以獲得總金額:SUM(金額)AS total_donation_per_donator_event) – hellcode 2014-11-05 09:41:17

+0

它顯示所有事件,但也會爲每個事件拆分和。我正在編輯我的答案,以向我展示您的結果,如果我GROUP BY捐助者,事件 – 2014-11-05 09:46:10

+0

但您可以在PHP腳本中添加。 – hellcode 2014-11-05 09:48:23

回答

1

使用MySQL的 'WITH ROLLUP'

http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html

從文檔:

GROUP BY子句允許一個WITH ROLLUP修飾符導致要加入額外的 行摘要輸出。這些行代表 更高級別(或超級聚合)摘要操作。

例子:

mysql> SELECT year, SUM(profit) FROM sales GROUP BY year; 
+------+-------------+ 
| year | SUM(profit) | 
+------+-------------+ 
| 2000 |  4525 | 
| 2001 |  3010 | 
+------+-------------+ 

mysql> SELECT year, SUM(profit) FROM sales GROUP BY year WITH ROLLUP; 
+------+-------------+ 
| year | SUM(profit) | 
+------+-------------+ 
| 2000 |  4525 | 
| 2001 |  3010 | 
| NULL |  7535 | 
+------+-------------+ 

閱讀更多信息

的文檔這是我的意思了SQLFiddle:http://sqlfiddle.com/#!2/636141/8

+0

您可以創建一個查詢的sqlfiddle並分享鏈接,以便我可以檢查。 – Deepak 2014-11-05 11:17:06

+0

我的php編程非常不同,但現在顯示正常。謝謝... – 2014-11-05 12:03:46

+0

如何在mysql查詢中使用ORDER BY?請告訴我。 – 2014-11-05 12:17:17