当前位置: 首页 > 知识库问答 >
问题:

快速查询加载特定数据列

薛宇
2023-03-14

我对工具包的结果计数有这样的输出格式:

   $out = array(
            'in progress' => 0,
            're-testing' => 0,
            'rejected' => 0,
            'negative' => 0,
            'positive' => 0,
            'inconclusive' => 0,
            'failed' => 0,
            'tested' => 0,
            'available' => 0,
            'total' => 0
        );

我实现了一个循环来查询工具包,然后检查结果值中的相关性,如下所示:

$kits = Kit::where('customerId', Auth::id())->get();
foreach ($kits as $kit) {
    if($kit->result !== '' && isset($out[$kit->result])){
        ++$out[$kit->result];
        ++$out['tested'];
    }
    if($kit->status == 'accepted' && !$kit->result){
        ++$out['in progress'];
    }
    ++$out['total'];
}

不幸的是,这个解决方案非常缓慢。你对如何做到这一点有什么建议吗?多谢了。

编辑:因为项目太多,所以很慢。

共有1个答案

罗甫
2023-03-14

首先,您使用条件customerid进行查询,因此向customerid字段添加索引将大大提高查询性能。

那么您不必计算总数,可以使用count()

$out['total'] = Kit::where('customerId', auth()->id())->count();

计算结果组++$out[$kit->result];的部分可以使用groupby()完成

$kits = Kit::where('customerId', auth()->id())
    ->groupBy('result')
    ->select('result', DB::raw('COUNT(*) as no'))
    ->get();

然后,对于要计算的每个结果,可以使用firstwhere()进行查找。

$out['positive'] = $kits->firstWhere('result', 'positive')->no;
$out['negative'] = $kits->firstWhere('result', 'negative')->no;
...

$out['tested']只是所有计数的总和。

$out['tested'] = $out['positive'] + $out['negative'] +...

并且需要对$OUT['inprogress']进行另一次查询

$out['in progress'] = Kit::where('customerId', auth()->id())
    ->where('status', 'accepted')
    ->whereNotNull('result')
    ->where('result', '!=', '')
    ->count();
 类似资料:
  • 下面几节介绍在ORM上下文中发出SELECT语句的技术。这主要涉及返回ORM映射对象实例的语句,但也涉及调用传递单个列或列组的窗体。 有关使用SQLAlChemy ORM进行查询的介绍,应参考以下教程之一: SQLAlchemy 1.4/2.0教程 -为 2.0 style 使用 对象关系教程(1.x API) -为 1.x style 用法。 由于SQLAlchemy 1.4代表了从1.x到2.

  • 问题内容: 我有以下查询: 目前,此查询大约需要93分钟才能完成。我想找到使它更快一点的方法。 该表大约有506,000行,其中大约490,000行包含的值,因此我怀疑我是否可以利用此处的任何索引。 该表(未压缩时)中包含约46 gigs的数据,但是该数据的大部分位于名为的文本字段中。我相信简单地加载和卸载许多页面会导致速度下降。一个想法是做一个新表 只是 在和现场,并保持尽可能小。但是,测试该理

  • 我需要将动态查询参数发送到 REST Web 服务 GET 方法[如下所示]。 主机:端口/应用程序?字段1=值1 消费者可以将参数发送到字段和值。每个字段都映射到值。 有了这种类型的要求,我无法在服务器端方法上编写一组有限的 QueryParams。 我在用python和fastapi 谢谢你。

  • 问题内容: 在Windows上运行的某些Java代码中,我正在从磁盘读取一些大的RGB数据块,并希望尽快将其显示在屏幕上。RGB数据是每个通道8位,没有任何alpha。目前,我具有类似以下的代码来创建BufferedImage。 问题在于将其呈现到屏幕的性能非常慢。大约250-300毫秒。我读过,为了获得最佳性能,您需要在与屏幕兼容的BufferedImage中显示。为此,我将从上述方法返回的缓冲

  • 问题内容: 我需要有关从此DataSnapshot结果中获取“消息”对象的帮助 我可以通过获取键值,并且也可以作为对象,这是FireBase自动生成的对象名称。而不是听对象本身。如何使用DataSnapshot成员方法浏览低谷,“发送者”或“消息”并获取其值? 问题答案: 我似乎在为具有多个子项的对象添加值侦听器。我猜这是一个查询,但是如果您在问题中包含代码,那将非常有帮助。但是,在您添加它之前,

  • 问题内容: 有时,我必须重新导入项目的数据,从而将大约360万行读入MySQL表(当前为InnoDB,但实际上我并不局限于此引擎)。事实证明,“加载数据infile …”是最快的解决方案,但它有一个折衷:-当不使用密钥导入时,导入本身需要大约45秒,但是密钥创建需要一定的时间(已经运行了20分钟。)。 )。-使用表上的键进行导入会大大降低导入速度 在表的3个字段上有键,引用了数字字段。有什么办法可