为什么groupby查询会产生语法错误

时间:2019-11-25 23:07:08

标签: sql laravel

我在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”(平均季节)分组。我究竟做错了什么。谢谢。 :)

2 个答案:

答案 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