0

バックグラウンド:

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

以前に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
4

1 に答える 1

2

最も簡単なのは、ユーザーのMySQLの出力を受信して​​表示するために使用しているクライアントプログラムでそれを行うことです-データ層にプレゼンテーション層機能を実装するのは間違いなく簡単ではありません!-)クライアントプログラムにどの言語&cがあるか教えてくださいそして私たちは助けることができるかもしれません...

編集:元の質問者の要求に応じて、単純なPythonクライアント側ソリューションを提供します。

PythonのDBAPIを使用すると、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)

markerは、特別なマーカーを出力内の目的の文字列にマップするための辞書'__xx__'です(「中間」の合計に対して適切に左パディングしているので、最終的な「総計」を印刷するときに、.strip()それらの空白を削除します)。また、最初の2つの列の両方がマーカーである特殊なケースをチェックするためにも使用します(その場合、2番目の列を代わりにスペースに変換する必要があるため)。Pythonのイディオムと使用法についてさらに明確にするために、コメントで遠慮なく質問してください。

提供されたデータを使用してこの関数を呼び出したときに表示される出力は次のとおりです(それぞれ3つの文字列の7つのタプルのリストに変換されます)。

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に変換する必要があるので、スペース調整はうまくいけばそれの中で最も少ないはずです)。

于 2009-05-29T01:48:54.843 に答える