我从三个MySQL表中提取数据,通过PHP中的AJAX和JSON生成一个引导数据表。
我有多个组织单位(第一单元、第二单元、第三单元等)我也有多个项目类型(初级、中级和高级)。最后,我想并排显示每个组织单元的两年数据(2105年和2014年)。
换句话说,结果表的结构是这样的(对于Beginning程序类型,有一行伪值):
Unit 1 Unit 2 Unit 3
2015 2014 2015 2014 2015 - 2014
Beginning 7 9 136 152 0 3
Intermediate
Advanced
将创建和填充此数据表的JSON对象需要看起来像:
[{"program_category":"Beginning","unit_1":{"2015":"7","2014":"9"},
"unit_2":{"2015":"136","2014":"152"},
"unit_3":{"2015":"0","2014":"3"}}]
到目前为止,我已经能够编写一个SQL查询,它生成一个JSON字符串,这让我非常接近,但正如您所看到的,"program_type"为每个组织单元重复:
这是SQL:
select all_programs_test.program_category as program_category, report_db.unit,
sum(case when all_programs_test.year = '2015' then 1 else 0 end) yr_2015,
sum(case when all_programs_test.year = '2014' then 1 else 0 end) yr_2014
from all_programs_test
JOIN report_db on report_db.id = all_programs_test.id
group by all_programs_test.program_category,report_db.unit
然后我在PHP中json_encode:
while($row = mysql_fetch_assoc($query4)) {
$query4_result[] = array (
'program_category' => $row['program_category'],
$row['unit'] => array(
'2015' => $row['yr_2015'],
'2014' => $row['yr_2014']
)
);
然后产生
[{"program_category":"Beginning","unit_1":{"2015":"7","2014":"9"}},
{"program_category":"Beginning","unit_2":{"2015":"136","2014":"152"}},
{"program_category":"Beginning","unit_3":{"2015":"0","2014":"3"}}]
正如您在上面的json对象片段中看到的,"Beginning"对每个组织单元都是重复的。任何关于如何做到这一点的想法:
[{"program_category":"Beginning","unit_1":{"2015":"7","2014":"9"},
"unit_2":{"2015":"136","2014":"152"},
"unit_3":{"2015":"0","2014":"3"}}]
谢谢!
试试这个:
$category_aux = '';
$record_aux = array();
while($row = mysql_fetch_assoc($query4)) {
if ($category_aux !== $row['program_category']){
$category_aux = $row['program_category'];
if ( ! empty($record_aux)) {
$query4_result[] = $record_aux;
}
$record_aux = array();
$record_aux['program_category'] = $category_aux;
}
$record_aux[$row['unit']] = array(
'2015' => $row['yr_2015'],
'2014' => $row['yr_2014']
);
}
// For the last one.
$query4_result[] = $record_aux;
我已经构建了您的代码的静态版本,试图重现您的问题,但它没有问题。
我认为问题可能与您在查询中的分组有关。你能给我们看看查询的结果吗?