Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么groupby查询会创建语法错误_Sql_Laravel - Fatal编程技术网

Sql 为什么groupby查询会创建语法错误

Sql 为什么groupby查询会创建语法错误,sql,laravel,Sql,Laravel,我对拉维尔的群比有意见。写入的错误是: 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) 此外,数据库中的字段包括: laravel框架中的查询是:

我对拉维尔的群比有意见。写入的错误是:

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)
此外,数据库中的字段包括:

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

您请求所有列,但未处理(或计算)列,则必须将它们添加到group by子句中。

解决此问题的方法有多种

第一个也是“最佳实践”是在select查询中包含you列

DB::table('serije_epizode')
        ->select('id_serije')
        ->where('id_serije', '=', $id)
        ->orderBy('sezona', 'asc')
        ->groupBy('sezona')
        ->get();
在select中,您必须有您的
groupBy
列,或者通常,select中的任何内容都应该在
groupBy

Group by可以接受多个值,因此您可以在select中使用如下内容:

select('serije_epizode','sezona','id_serije')
而在你的小组里你也应该有同样的经历

groupBy('serije_epizode','sezona','id_serije')
第二个和“不太好的实践”,但在许多项目中都看到过,它在您的
数据库.php
文件中,您将找到您的mysql设置

您将在其中找到一个名为
strict
的字段,该字段的值为
true
。如果将其更改为
false
并运行
php-artisan-config:cache
您的
分组依据将起作用

我强烈建议选择第一个选项,或者更好地创建一个模型并使用雄辩,但这取决于您


您的另一个选项可能是使用
distinct()
unique()
从列返回唯一值,而不是
groupBy

必须在group by子句中声明select列表中不是计算列的每一列。感谢您的建议,但它仍然不起作用。我收到错误:语法错误或访问冲突:1055'smf.serije\u epizode.id\u serije'不在分组依据中(SQL:select
id\u serije
sezona
br\u epizode
来自
serije\u epizode
其中
id\u serije
=1个分组依据
sezona
order BY
sezona
asc,
br\u epizode>asc)从你的错误判断,你没有使用我的答案。在select中仍然有3列,在groupby中仍然有1列。当我在groupby中添加id_serije时,仍然会得到相同的错误。语法错误或访问冲突:1055“smf.serije_epizode.br_epizode”不在组中(SQL:选择
id\u serije
sezona
br\u epizode
serije\u epizode
中,其中
id\u serije
=1组由
id\u serije
sezona
sezona
asc,
br\u epizode
asc)当我在GroupBY中添加所有3个字段时,我得到的结果与没有GroupBY的结果相同。我有一个电视节目是(id_serije/id_show),然后给季节和剧集编号。我想按id查找电视节目,然后按季节对所有epizodes进行分组。这是我找不到的结果。我的答案中有1个以上的解决方案:)如果你不能得到这份工作,那就试试下一份吧。我会把第二个当作最后一个。