[英]PHP Nested for-each loop
$QRYS1 = QUERY;
$QRYS2 = QUERY;
$QRYS3 = QUERY;
$QRYS4 = QUERY;
foreach($QRYS1 as $QRY1)
{
foreach($QRYS2 as $QRY2)
{
if(bla)
{
foreach($QRYS3 as $QRY3)
{
foreach($QRYS4 as $QRY4)
{
}
}
}
}
}
The above style of code makes data processing very slow. 上面的代码样式使数据处理非常缓慢。 Is there anyway I can make the processing fast? 无论如何,我可以使处理速度更快吗?
I am getting the data doing joining and counting with multiple tables and its all ARRAY(). 我正在使用多个表及其所有ARRAY()进行联接和计数的数据。
fetching table using for-each loop will slow down your page. 使用for-each循环获取表会降低您的页面速度。 You can try joining of tables and fetch those fields which you want. 您可以尝试联接表并获取所需的那些字段。
<?php
$TotalCountofDepartmentforSelectedComp_id = Userlog::where('userlogs.company_id', '=', $comp_id)
->where_Between('userlogs.created_at', $startDate, $endDate)
->group_by('userlogs.department_id')
->get(['userlogs.department_id', DB::raw('count(userlogs.user_id) as totaldepartmentcount')]);
$ProductListforSelectedComp_id = Product::join('userlogs', 'userlogs.product_id', '=', 'products.id')
->where('userlogs.company_id', '=', $comp_id)
->distinct()
->get(['products.id', 'products.name']);
$TotalCountCompanyProductWiseinforSelectedComp_id = Product::join('userlogs', 'userlogs.product_id', '=', 'products.id')
->where('userlogs.company_id', '=', $comp_id)
->where_Between('userlogs.created_at', $startDate, $endDate)
->group_by('products.id')
->get(['products.id', DB::raw('count(userlogs.user_id) as totalcompanyproductcountuserwise')]);
$DepartmentListsforSelectedComp_id = Department::where('company_id', '=', $comp_id)->get(
['departments.id', 'departments.name']
);
$TotalCountCompanyDepartmentProductWiseinforSelectedComp_id = DB::query(
'SELECT T1.id, T2.department_id,
COALESCE(T2.totaldepartmentproductcountuserwise, 0) AS totaldepartmentproductcountuserwise
FROM (
SELECT DISTINCT products.id FROM products
INNER JOIN userlogs ON userlogs.product_id = products.id
WHERE company_id = ?
) AS T1
LEFT JOIN (
SELECT department_id, product_id, COUNT(*) AS totaldepartmentproductcountuserwise
FROM userlogs
WHERE company_id = ?
AND created_at BETWEEN ? AND ?
GROUP BY department_id, product_id
) AS T2 ON T2.product_id = T1.id',
array($comp_id, $comp_id, $startDate, $endDate));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.