2009-05-29 56 views
0

背景:的mysql 「與彙總」 查詢演變成一個樹狀結構

我已經在MySQL中定義這個 「與彙總」 查詢:

SELECT  
     case TRIM(company) 
      when 'apple'  THEN 'AAPL' 
      when 'microsoft' THEN 'MSFT' 
      else '__xx__' 
     END as company   

     ,case TRIM(division) 
      when 'hardware'   THEN Trim(division) 
      when 'software'   THEN Trim(division) 
      else '__xx__' 
     END as division 

     ,concat('$' , format(sum(trydollar),0)) as dollars 
    FROM  pivtest 
    GROUP BY  
     company, division with rollup   

而且它生成的輸出:

AAPL;hardware;$279,296 
AAPL;software;$293,620 
AAPL;__xx__;$572,916 
MSFT;hardware;$306,045 
MSFT;software;$308,097 
MSFT;__xx__;$614,142 
__xx__;__xx__;$1,187,058 

如果您使用過「with rollup」查詢在MySQL之前,你很可能會推斷我的源表的結構。

問:

鑑於MySQL的這個原始輸出,是什麼讓像下面這樣的「樹」結構最簡單的方法?

AAPL 
    hardware;$279,296 
    software;$293,620 
     Total; $572,916 
MSFT 
    hardware;$306,045 
    software;$308,097 
     Total;$614,142 
Total  
      $1,187,058 
+0

http://www.tagarga.com/blok/on/061029,要考慮的一個概念是鄰接列表方法 – dreftymac 2009-05-29 19:17:08

回答

2

最簡單是做以任何客戶端程序你使用的接收和顯示用戶MySQL的輸出 - 絕對最容易實現數據層表示層的功能 - !)所以告訴我們你的客戶端程序中有哪些語言& c,我們可能會幫助...

編輯:在原始提問者的請求中給出一個簡單的Python客戶端解決方案。

使用Python的DB API,來自DB查詢的結果可以最簡單地看作是元組列表。因此,這裏的格式化這些結果的功能要求:

def formout(results): 
    marker = dict(__xx__=' Total') 
    current_stock = None 
    for stock, kind, cash in results: 
    if stock != current_stock: 
     print marker.get(stock, stock).strip() 
     current_stock = stock 
    if kind in marker and stock in marker: 
     kind = ' '*8 
    print ' %s;%s' % (marker.get(kind, kind), cash) 

是特殊標記'__xx__'映射到輸出所需的字符串一本字典(我適當左填充它的「中間」總計,所以當我打印最後的「總計」時,我將.strip()這些空白刪除)。我也用它來檢查前兩列都是標記的特殊情況(因爲在那種情況下,第二列需要變成空格)。隨意在評論中詢問是否有必要進一步澄清Python成語和使用方法!

下面是輸出我看到當我打電話與所提供的數據這一功能(變成的每個的7元組3串的列表):

AAPL 
    hardware;$279,296 
    software;$293,620 
     Total;$572,916 
MSFT 
    hardware;$306,045 
    software;$308,097 
     Total;$614,142 
Total 
      ;$1,187,058 

的空間對準是不相同的,我看到在這個問題上(這在有多少空間應該在哪裏方面有點不一致),但是我希望它足夠接近你想讓你容易調整以滿足你的確切需求的東西(就像你有無論如何將Python翻譯成PHP,空間調整應該是最不重要的)。

+0

是的,我絕對不打算在純SQL中實現這個。目前,我正在使用PHP。 – dreftymac 2009-05-29 16:17:59