繁体   English   中英

如何获取基于特定列的所有不同行?

[英]How to get all distinct rows based on a particular column?

似乎是由于MySQL 5.7或更高版本的更改,默认情况下启用了SQL模式ONLY_FULL_GROUP_BY,所以我的旧代码如下所示:

Table::where('name', 'LIKE', '%'.$search_str.'%')
    ->groupBy('name')
    ->get();

现在抛出错误...

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column

我尝试以各种方式更新代码以尝试使其正常运行,但是没有运气。

这是我目前拥有的:

Table::where('name', 'LIKE', '%'.$search_str.'%')
    ->selectRaw('name, ANY_VALUE(id), ANY_VALUE(col_a), ANY_VALUE(col_b), ANY_VALUE(col_c), ANY_VALUE(col_d)')
    ->groupBy('name')
    ->get();

这不会引发任何错误,但是缺少列数据。

我也尝试过:

Table::where('name', 'LIKE', '%'.$search_str.'%')
    ->groupBy('name')
    ->groupBy('id')
    ->get();

不会根据“名称”返回不同的行。 它只是返回所有内容。

如何在Laravel Eloquent或原始MySQL中做到这一点?

groupBy()方法通过给定键将集合的项目分组。 您应该先获得一个收藏集:

Table::where('name', 'LIKE', '%'.$search_str.'%')
    ->get()
    ->groupBy('name');

config/database.php文件中,将'strict' => true,更改为'strict' => false,然后尝试

Table::where('name', 'LIKE', '%'.$search_str.'%')
->groupBy('name')
->get();

我不确定您是否正在寻找这个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM