我在Laravel中遇到GroupBy问题。写入的错误是:
SQLSTATE[42000]: Syntax error or access violation: 1055 'smf.serije_epizode.id' isn't in GROUP BY (SQL: select * from `serije_epizode` where `id_serije` = 1 group by `sezona` order by `sezona` asc)
此外,数据库中的字段是: https://i.imgur.com/a1Ysm71.png
在laravel框架中的查询是:
public function prikaz($id)
{
$serija = DB::table('serije')
->where('id', $id)
->first();
$epizode = DB::table('serije_epizode')
->where('id_serije', '=', $id)
->orderBy('sezona', 'asc')
->groupBy('sezona')
->get();
return view('serije.prikaz', ['serija' => $serija, 'epizode' => $epizode]);
}
查看刀片:
@foreach ($epizode as $serijaa)
Sezona: {{$serijaa->sezona}} | Epizoda: {{$serijaa->br_epizode}} - {{$serijaa->naziv}
@endforeach
那么,当我有那个时候,为什么我不能按“ sezona”(平均季节)分组。我究竟做错了什么。谢谢。 :)
答案 0 :(得分:1)
您请求所有列,但未处理(或计算)列,则必须将其添加到group by子句中。
答案 1 :(得分:0)
有多种方法可以解决此问题。
第一和“最佳实践”是将您列包含在选择查询中。
DB::table('serije_epizode')
->select('id_serije')
->where('id_serije', '=', $id)
->orderBy('sezona', 'asc')
->groupBy('sezona')
->get();
在选择项内,您必须具有groupBy
列,或者通常来说,我在选择项内的任何内容都应位于groupBy
分组依据可以接受多个值,因此您可以在选择中输入以下内容:
select('serije_epizode','sezona','id_serije')
在您所在的小组中,您应该有相同的身份
groupBy('serije_epizode','sezona','id_serije')
第二个和“不太好的做法”,但是在许多项目中都看到过,它位于您的database.php
文件中,您将找到mysql设置。
您将在其中找到名为strict
的字段,其值为true
。如果将其更改为false
并运行php artisan config:cache
,则group by
可以正常工作。
我强烈建议您选择第一种方法,甚至更好地创建模型并使用Eloquent,但这取决于您。
您的另一种选择可能是使用distinct()
或unique()
从列中返回唯一值,而不是groupBy