Chaque champ non agrégé doit être regroupé.
C'est un comportement standard qui, dans mysql, dépend du mode ONLY_FULL_GROUP_BY.
Ce mode est activé par défaut dans>=5.7
.
select posts.id, post.user_id, 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, posts.user_id
order by likes_count desc
limit 5
Ou, vous pouvez aggregate
il :
select posts.id, MIN(post.user_id), 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
Autre manière - changez sql_mode
:
SET SESSION sql_mode = '';
Aussi, vous pouvez le diviser en 2 requêtes :
- Obtenir des identifiants agrégés et de publication
- Obtenir les données des publications avec les identifiants récupérés (avec la
IN clause
)