我的网页上有一个有很多目标的调查,从1到5进行评估。我将调查发送到我的调查表中的数据库中。 例如
obj1value | obj2value | obj3value ... | obj17value |
我对每次调查都有价值。
现在我需要做一些图表来呈现调查报告。 我需要为每个目标加总。 我有这个查询
SELECT SUM(obj1_value) AS objective1, SUM(obj2_value) AS objective2, SUM(obj3_value) AS objective3, FROM tbl_survey
我有这个直到objective17并且查询返回
| objective1 | objective2 | objective3 |
| --- | --- | --- |
| 17 | 12 | 5 |
但我需要像这样更改查询
_objective_ | _Value_
objective1 | 17
objective2 | 12
objective3 | 5
Objective17 | n
有人可以帮我查询优化,因为通过这种方式我可以在json中转换表php并使条形图库变得如此简单。
谢谢
答案 0 :(得分:0)
这个问题的解决方案是PIVOT AN UNPOVIT,你可以改变你想要的输出,this is tutorial can help you
答案 1 :(得分:0)
在PHP中进行转换可能最简单。 MySQL中的一种方法是简单的UNION ALL
:
SELECT 'obj1_value', SUM(obj1_value)
FROM tbl_survey
UNION ALL
SELECT 'obj2_value', SUM(obj2_value)
FROM tbl_survey
UNION ALL
. . .
这种方法的缺点是表格扫描了17次,所以它可能需要17倍的时间。
您可以通过执行unpivot来提高性能。这是MySQL中的一种方法:
SELECT o.obj,
(CASE WHEN obj = 'objective1' THEN objective1
WHEN obj = 'objective2' THEN objective2
. . .
END) as value
FROM (SELECT SUM(obj1_value) AS objective1, SUM(obj2_value) AS objective2,
SUM(obj3_value) AS objective3, . . .
FROM tbl_survey
) s CROSS JOIN
(SELECT 'objective1' as obj UNION ALL
SELECT 'objective2' as obj UNION ALL
. . .
) o;