【问题标题】:How to GroupBy in Query Laravel 5.8如何在查询 Laravel 5.8 中进行分组
【发布时间】:2020-04-11 18:35:02
【问题描述】:

我想使用 laravel 查询构建器在我的数据中对 table_name 进行分组。但是当我运行它时,结果仍然没有分组。 这是我的数据:

这是我的查询:

$data['list_module'] = DB::table('roles as a')
                         ->leftJoin('permission_role as b', 'a.id', 'b.role_id')
                         ->leftJoin('permissions as c', 'b.permission_id', 'c.id')
                         ->where('a.id', $id)
                         ->select('c.key','c.table_name')
                         ->groupBy('c.key', 'c.table_name')
                         ->orderBy('c.table_name', 'DESC')
                         ->get();

【问题讨论】:

  • 已经分组了,按keytablename分组。
  • GROUP BY 在 sql 中用于允许对数据集进行聚合查询。您在这里似乎没有任何此类查询。你想达到什么目的?

标签: mysql sql laravel laravel-5 eloquent


【解决方案1】:

已经分组了,按keytable_name分组。

如果你只想按table_name 分组,试试这个:

$data['list_module'] = DB::table('roles as a')
                         ->leftJoin('permission_role as b', 'a.id', 'b.role_id')
                         ->leftJoin('permissions as c', 'b.permission_id', 'c.id')
                         ->where('a.id', $id)
                         ->select('c.key','c.table_name')
                         ->groupBy('c.table_name')
                         ->orderBy('c.table_name', 'DESC')
                         ->get();

如果你设置sql_mode为only_full_group_by,我觉得你需要使用any_value

->select(\DB::raw('ANY_VALUE(c.key) AS key'),'c.table_name')

或在应用程序的数据库配置文件config/database.php mysql 数组中,设置strict => false 以禁用MySQL 的严格模式:

【讨论】:

  • 我尝试将groupBy('c.key', 'c.table_name') 更改为groupBy('c.table_name'),但出现错误c.id isn't in GROUP BY。我想要这样的分组结果table_name: "users", key: "delet" key: "edit", etc
  • 对不起,我的意思是c.key isn't in GroupBy
  • @RahmatEffendi 我认为这个错误与sql_mode=only_full_group_by不兼容,你需要使用any_value或者设置sql_mode而不使用only_full_group_by
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2021-06-22
相关资源
最近更新 更多