在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
如果您已经在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
解决方案
最简单是做以任何客户端程序你使用的接收和显示用户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)
marker
是字典的特殊标记'__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,空间调整应该有希望是至少它)。
不隶属于 StackOverflow