获得行数据,计数和总数的高效查询。 (atm 32查询)

时间:2016-11-15 21:14:14

标签: php mysql laravel laravel-5

我正在使用Laravel 5.3,目前我正在制作一个包含多个部分的帐单。这些部分从1个表中返回所有数据,它们之间唯一的区别是“类型”列,它标识它们将被分类到它们的适当部分。对于每个部分,我调用4个查询。

目前,共有8个部分。 8乘4,总共32个SQL查询。

一个部分有4个这样的查询:

$records['data'] = Model::where('type', 'x1')->get();
$records['total_cost'] = Model::where('type', 'x1')->sum('cost');
$records['count'] = Model::where('type', 'x1')->count();
$records['total_duration'] = Model::where('type', 'x1')->sum('duration');

我对每个部分重复同样的事情。我不相信这是正确的方法。

我不确定从哪里开始。

1 个答案:

答案 0 :(得分:0)

简单地说:)

$data = Model::groupBy('type')->get();

$totalCost = $count = $totalDuration = [];

$types = ['x1', 'x2'];

foreach($types as $type) {
  $totalCost[$type] = $data[$type]->sum('cost');
  $count[$type] = $data[$type]->count();
  $totalDuration[$type] = $data[$type]->sum('duration');
}

仅一个查询:)