gpt4 book ai didi

php - Laravel Report Analytics - 缓慢的 foreach 查询循环

转载 作者:行者123 更新时间:2023-11-29 18:35:52 25 4
gpt4 key购买 nike

我目前正在为我们的工作站点构建一个分析系统,我们有一个带时间戳的应用程序数据库。

我正在尝试获取特定月份每天的应用程序数量,我正在使用 ajax 和图表 js 执行此操作,但是代码可以工作,php 非常慢,我只是想知道是否有任何方法可以改进它。下面是我正在使用的代码:

$days = cal_days_in_month(CAL_GREGORIAN,$qmonth,$qyear);
foreach (range(1, $days) as $key => $number) {
$count = App\report::whereYear('date_created', $qyear)->whereMonth('date_created', $qmonth)->whereDay('date_created', $number)->count();
$cart[] = array('day' => $number, 'count' => $count);
}
$result = json_encode($cart);
print_r($count);

我将两个 url 参数传递给 php 代码 $qmonth 和 $qyear,我运行了 28 到 31 次查询,具体取决于该月有多少天,因为我需要计算每天的应用程序数量基础。有没有什么可以让我在不循环查询 30 次的情况下做到这一点,因为我认为这就是查询如此慢的原因?

最诚挚的问候,加雷思

最佳答案

这是对所有结果进行 PHP 转换的方法:

$cart = [];
$days = cal_days_in_month(CAL_GREGORIAN, $qmonth, $qyear);
$reports = App\report::whereYear('date_created', $qyear)->whereMonth('date_created', $qmonth)->get();
$reports = $reports->groupBy(function ($report) {
return date('d', $report->date_created);
})->toArray();

foreach (range(1, $days) as $day) {
$count = isset($reports[$day]) ? count($reports[$day]) : 0;
$cart[] = ['day' => $day, 'count' => $count];
}

$result = json_encode($cart);
print_r($count);

请注意,在 $reports 集合上使用 groupBy 时,您必须返返回告的日期。我不确定您使用的是什么格式,但如果是时间戳,您可以使用 date 函数对其进行格式化以返回日期,如示例所示。

让我知道它运行的速度。

编辑:

如果date_created是一个carbon实例,则从报告集合groupBy返回$report->date_created->format('d'); > 方法。

关于php - Laravel Report Analytics - 缓慢的 foreach 查询循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45305222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com