Tengo este error en la consulta elocuente de laravel:

"La expresión de la lista SELECT no está en la cláusula GROUP BY y contiene una columna no agregada"

    $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();
0
Zahra Badri 16 oct. 2018 a las 15:21

2 respuestas

La mejor respuesta

Una forma de encontrar la última fila es usar una subconsulta correlacionada que identifique la última (suponiendo que tenga una forma de hacerlo) en este ejemplo, la última se identifica como el ID máximo auto_incrementado

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
P.Salmon 16 oct. 2018 a las 13:14

Siempre que usamos la cláusula Agrupar por, el resto de las columnas que estamos seleccionando deben tener la función agregada (como: min, max, avg, sum).

Ejemplo:

select sum(t.name),t.age
from table1 t
group by t.age
2
Ankit Agrawal 16 oct. 2018 a las 12:28