如何根据特定列获取所有不同的行?

时间:2017-02-08 03:35:16

标签: php mysql laravel eloquent laravel-5.3

似乎由于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();

根据'name'不返回不同的行。它只会返回所有内容。

如何在Laravel Eloquent或原始MySQL中执行此操作?

2 个答案:

答案 0 :(得分:0)

groupBy()方法按给定键对集合项目进行分组。你应该先收集一个集合:

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

答案 1 :(得分:0)

import { Observable } from 'rxjs/Rx'; import 'rxjs/add/operator/finally'; // ... this.httpService.getRequest() .finally(() => { // Execute after graceful or exceptionally termination console.log('Handle logging logic...'); }) .subscribe ( result => { // Handle result console.log(result) }, error => { this.errors = error; }, () => { // No errors, route to new page } ); 文件中将#!/usr/bin/python2 ylist = [1, 2, 3, 4, 5, 6, 7, 9, 2, 5, 3, -1] print ylist target = int(raw_input("enter the target number")) for i in xrange(len(ylist)): sno = target-ylist[i] for j in xrange(i+1, len(ylist)): if ylist[j] == sno: print ylist[i], ylist[j] 更改为config/database.php并尝试

'strict' => true,

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