【发布时间】:2021-03-15 13:37:53
【问题描述】:
我有这种用于试剂盒结果计数的输出格式:
$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'];
}
不幸的是,这个解决方案非常慢。你对如何做到这一点有什么建议吗?谢谢。
编辑:因为项目太多,所以速度很慢。
【问题讨论】:
-
解决方案很慢是什么意思?是在查询端还是在对象的迭代端?
-
最快的方法几乎肯定是将逻辑放入单个 SQL 查询中,让数据库代表您完成。但如果这不是一个选项,您将不得不定义“慢”并为代码的各个部分提供一些时间。是慢的
where,还是循环?循环中有多少项? -
@hppycoder 很慢,因为数据库中有很多套件。如何实现单个查询?
-
太好了,那么这与其说是 PHP 问题,不如说是 MySQL 问题?你的表结构是什么?
标签: php database laravel eloquent