[英]PHP queries inside loop
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
它會影響我的表現嗎? 如果確實如此,則擴展到哪個范圍。
是。 很難說使用2000個查詢會在多大程度上影響性能。 但是與執行1、2、20、200個查詢相比,它的性能明顯較差。
而且,如果不知道您正在運行哪些查詢,使用過的PHP循環或沒有更完整的數據集,就很難進一步建議您。
話雖這么說,使用2000個查詢(每年和一個代碼一次)是荒謬的,而且可以肯定地對其進行優化。 因此,我寫了以下內容:
該查詢假定對於給定的code
和year
, table_b
可能存在多個條目,因此,使用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,
],
];
*/
由此,您可以輕松地遍歷數據結構以根據問題生成表布局。
如果您使用當前使用的代碼更新問題,那么我很可能會進一步完善該答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.