code name 1 abc 2 xyz 4 lol 6 lll
表B
code year no
1 1990 406
6 2016 510
2 2017 777
6 2017 511
2 2016 777
我想在表格中显示数据:
Name 1990 1991 1992 .............2017
abc 1 0 0 0
xyz 0 0 0 1
答案 0 :(得分:0)
这会影响我的表现吗?如果它确实如此,那么。
是。很难说使用2000查询会在多大程度上影响性能。但与执行1,2,20,200个查询相比,它显然效果不佳。
如果您不知道自己正在运行什么样的查询,使用过的PHP循环,也没有更完整的数据集,那么很难再为您提供建议。
话虽这么说,使用2000个查询(每年一个和代码)是荒谬的,并且肯定可以优化。因此,我写了以下内容:
此查询假定table_b
中给定code
和year
可能有多个条目,因此使用group by
和sum
结合这些结果。
SELECT a.name, b.year, SUM(b.no) AS number
FROM table_a a
INNER JOIN table_b b ON (a.code = b.code)
GROUP BY a.code, b.year
ORDER BY b.year ASC, a.name ASC
此查询的输出应为:
name year number
--------------------------
abc 1990 406
lll 2016 510
xyz 2016 777
lll 2017 511
xyz 2017 777
如果您要使用循环重构数据,例如以下内容(尽管可以通过for
,foreach
或while
循环完成,那么您将创建以下数据结构。
$data = array_reduce($results, function ($data, $result) {
extract('result');
$data[$name][$year] = $number;
return $data;
}, []);
/*
$data = [
'abc' => [
1990 => 406,
],
'lll' => [
2016 => 510,
2017 => 511,
],
'xyz' => [
2016 => 777,
2017 => 777,
],
];
*/
通过这种方式,您可以轻松地迭代数据结构,从而根据您的问题生成表格布局。
如果您使用目前正在使用的代码更新问题,我很可能会进一步完善此答案。