Ich habe zwei Modelle: posts
und likings
, die One-to-many Beziehung (so, ein Beitrag hat viele Likes). Likings Modell hat auch ein isActive
Feld, das zeigt, dass Liking aktiv oder passiv ist.Wie zu lösen "ist nicht in GROUP BY" Fehler in MySQL Abfrage
Ich möchte Top 5 Beiträge erhalten, die maximal "aktive" Likes erhalten haben (nur Likes, deren isActive Feld wahr ist, würden berücksichtigt werden).
Dies ist die Abfrage:
select posts.*, count(likings.id) as likes_count from 'posts'
left join 'likings' on 'likings'.'post_id' = 'posts'.'id' and 'likings'.'isActive' = 1
group by 'posts'.'id'
order by 'likes_count' desc
limit 5
, die aus dieser Laravel Abfrage ergab sich:
Post::selectRaw('posts.*, count(likes.id) as likes_count')
->leftJoin('likes', function ($join) {
$join->on('likes.post_id', '=', 'posts.id')
->where('likes.is_active', '=', 1);
})
->groupBy('posts.id')
->orderBy('likes_count', 'desc')
->take(5)
->get();
Und das ist der Fehler: Hier
SQLSTATE[42000]: Syntax error or access violation: 1055
'database.posts.user_id' isn't in GROUP BY
, posts.user_id
ist auch ein Feld posts
Tabelle und zeigt den Besitzer der Post.
Wie kann ich diesen Fehler beheben? Es scheint, dass es nicht logisch ist, mysql config zu ändern (wahrscheinlich ONLY_FULL_GROUP_BY
Modus zu löschen), aber minimale Änderung in der Abfrage.
Standardmäßig müssen Sie jedes ausgewählte Feld in der Gruppenklausel auflisten oder eine der Aggregatfunktionen verwenden. –