Выражение списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец - PullRequest
0 голосов
/ 16 октября 2018

У меня есть эта ошибка в красноречивом запросе laravel:

"Выражение списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец"

    $data = DB::table('passages')
        ->select('passages.*','users.name','users.family','valid_users.user_id','valid_users.valid_card_id','valid_users.valid_card_decimal','valid_users.valid_card_hex')
        ->join('valid_users','valid_users.id','=','passages.valid_user_id')
        ->join('users','valid_users.user_id','=','users.id')
        ->join('accounts','accounts.user_id','=','users.id')
        ->whereIn('accounts.role_id',$roles)
        ->groupBy('valid_user_id')
        ->get();

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Способ найти последнюю строку - использовать коррелированный подзапрос, который идентифицирует последний (при условии, что у вас есть способ сделать это), в этом примере последний идентифицируется как max auto_incremented id

drop table if exists t;
create table t( id  int auto_increment primary key, userid  int, val varchar(10));
insert into t (userid,val) values
(1,100),(2,10),(1,15),(2,20);

select t.* 
from t
where id = (select max(id) from t t1 where t1.userid = t.userid);

+----+--------+------+
| id | userid | val  |
+----+--------+------+
|  3 |      1 | 15   |
|  4 |      2 | 20   |
+----+--------+------+
2 rows in set (0.00 sec)
0 голосов
/ 16 октября 2018

всякий раз, когда мы используем предложение Group by, остальные столбцы, которые мы выбираем, должны быть с функцией aggegate (например: min, max, avg, sum).

пример:

select sum(t.name),t.age
from table1 t
group by t.age
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...