如何通过在 Laravel 5.7 中的同一列中执行不同的查询来创建不同的别名
How to create different aliases by doing different queries in the same column in Laravel 5.7
我在存储索引的 MySQL 中有一个 table,我需要通过为每个计数带一个别名来计算一列索引。
我尝试了以下代码,但它不起作用,而且由于我是 Laravel 的新手,我不确定如何构建此查询
$data = Baralho::select(
DB::raw("YEAR(data_entrada) as ano"),
DB::raw("count(id_situacao) as inseridos, id_situacao"),
DB::raw("count(id_situacao = 2) as presos"),
DB::raw("count(id_situacao = 3) as mortos"),
DB::raw("count(id_situacao = 4) as retirados")
)->groupBy("ano")->get();
$geral[] = ['Ano', 'Inseridos', 'Presos', 'Mortos', 'Retirados'];
//$anos = $data->pluck('ano');
foreach($data as $key => $value){
$geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados ];
}
dd($geral);
我需要它来计算索引和 return 每个别名的结果,例如,如果在列 id_situacao
中索引是 2
它会计算所有 2 个索引并且给我带别名 presos
的结果,这样我就可以将这些结果插入我的数组 $geral[]
dd($geral) Result
编辑:
我尝试使用以下代码:
$data = DB::select(
DB::raw('(SELECT YEAR(data_entrada) as ano FROM baralho)'),
DB::raw('(SELECT count(id_situacao) as inseridos FROM baralho)'),
DB::raw('(SELECT count(id_situacao) as presos FROM baralho WHERE id_situacao = 2)'),
DB::raw('(SELECT count(id_situacao) as mortos FROM baralho WHERE id_situacao = 3)'),
DB::raw('(SELECT count(id_situacao) as retirados FROM baralho WHERE id_situacao = 4)')
)->groupBy('ano')->get();;
$geral[] = ['Ano', 'Inseridos', 'Presos', 'Mortos', 'Retirados'];
//$anos = $data->pluck('ano');
//dd($anos);
foreach($data as $key => $value){
$geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados];
//dd($value);
}
dd($geral);
但我收到错误消息:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError
(E_RECOVERABLE_ERROR) Argument 1 passed to
Illuminate\Database\Connection::prepareBindings() must be of the type
array, object given, called in
/home/.../.../...com/.../vendor/laravel/framework/src/Illuminate/Database/Connection.php
on line 328
你的解释对我来说不是很清楚,但我想我明白你想要什么。试试这个:
$data = Baralho::select(
DB::raw("YEAR(data_entrada) as ano"),
DB::raw("count(id_situacao) as inseridos, id_situacao"),
DB::raw("count(id_situacao = 2) as presos"),
DB::raw("count(id_situacao = 3) as mortos"),
DB::raw("count(id_situacao = 4) as retirados")
)->groupBy("ano")->get();
$geral = [];
//$anos = $data->pluck('ano');
foreach($data as $key => $value){
$geral[++$key] = ['Ano' => $value->ano, 'Inseridos' => $value->inseridos, 'Presos' => $value->presos, 'Mortos' => $value->mortos, 'Retirados' => $value->retirados ];
}
好吧,我能够通过以下方式解决我的问题:
$data = Baralho::select(
DB::raw("YEAR(data_entrada) as ano"),
DB::raw("count(id_situacao) as inseridos, id_situacao"),
DB::raw("count(case when id_situacao = 2 then 1 end) as presos"),
DB::raw("count(case when id_situacao = 3 then 1 end) as mortos"),
DB::raw("count(case when id_situacao = 4 then 1 end) as retirados")
)->groupBy("ano")->get();
$geral[] = ["Ano", "Inseridos", "Presos", "Mortos", "Retirados"];
foreach($data as $key => $value){
$geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados ];
}
只有使用 CASE
子句,我才能通过按 id 分组并为每种类型返回别名来计算 id_situacao
字段
我在存储索引的 MySQL 中有一个 table,我需要通过为每个计数带一个别名来计算一列索引。
我尝试了以下代码,但它不起作用,而且由于我是 Laravel 的新手,我不确定如何构建此查询
$data = Baralho::select(
DB::raw("YEAR(data_entrada) as ano"),
DB::raw("count(id_situacao) as inseridos, id_situacao"),
DB::raw("count(id_situacao = 2) as presos"),
DB::raw("count(id_situacao = 3) as mortos"),
DB::raw("count(id_situacao = 4) as retirados")
)->groupBy("ano")->get();
$geral[] = ['Ano', 'Inseridos', 'Presos', 'Mortos', 'Retirados'];
//$anos = $data->pluck('ano');
foreach($data as $key => $value){
$geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados ];
}
dd($geral);
我需要它来计算索引和 return 每个别名的结果,例如,如果在列 id_situacao
中索引是 2
它会计算所有 2 个索引并且给我带别名 presos
的结果,这样我就可以将这些结果插入我的数组 $geral[]
dd($geral) Result
编辑:
我尝试使用以下代码:
$data = DB::select(
DB::raw('(SELECT YEAR(data_entrada) as ano FROM baralho)'),
DB::raw('(SELECT count(id_situacao) as inseridos FROM baralho)'),
DB::raw('(SELECT count(id_situacao) as presos FROM baralho WHERE id_situacao = 2)'),
DB::raw('(SELECT count(id_situacao) as mortos FROM baralho WHERE id_situacao = 3)'),
DB::raw('(SELECT count(id_situacao) as retirados FROM baralho WHERE id_situacao = 4)')
)->groupBy('ano')->get();;
$geral[] = ['Ano', 'Inseridos', 'Presos', 'Mortos', 'Retirados'];
//$anos = $data->pluck('ano');
//dd($anos);
foreach($data as $key => $value){
$geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados];
//dd($value);
}
dd($geral);
但我收到错误消息:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR) Argument 1 passed to Illuminate\Database\Connection::prepareBindings() must be of the type array, object given, called in /home/.../.../...com/.../vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 328
你的解释对我来说不是很清楚,但我想我明白你想要什么。试试这个:
$data = Baralho::select(
DB::raw("YEAR(data_entrada) as ano"),
DB::raw("count(id_situacao) as inseridos, id_situacao"),
DB::raw("count(id_situacao = 2) as presos"),
DB::raw("count(id_situacao = 3) as mortos"),
DB::raw("count(id_situacao = 4) as retirados")
)->groupBy("ano")->get();
$geral = [];
//$anos = $data->pluck('ano');
foreach($data as $key => $value){
$geral[++$key] = ['Ano' => $value->ano, 'Inseridos' => $value->inseridos, 'Presos' => $value->presos, 'Mortos' => $value->mortos, 'Retirados' => $value->retirados ];
}
好吧,我能够通过以下方式解决我的问题:
$data = Baralho::select(
DB::raw("YEAR(data_entrada) as ano"),
DB::raw("count(id_situacao) as inseridos, id_situacao"),
DB::raw("count(case when id_situacao = 2 then 1 end) as presos"),
DB::raw("count(case when id_situacao = 3 then 1 end) as mortos"),
DB::raw("count(case when id_situacao = 4 then 1 end) as retirados")
)->groupBy("ano")->get();
$geral[] = ["Ano", "Inseridos", "Presos", "Mortos", "Retirados"];
foreach($data as $key => $value){
$geral[++$key] = [$value->ano, $value->inseridos, $value->presos, $value->mortos, $value->retirados ];
}
只有使用 CASE
子句,我才能通过按 id 分组并为每种类型返回别名来计算 id_situacao
字段