Každé neagregované pole by mělo být seskupeno.
Je to standardní chování, které v mysql závisí na režimu ONLY_FULL_GROUP_BY.
Tento režim je ve výchozím nastavení povolen v>=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
Nebo můžete aggregate
to:
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
Jiný způsob - změňte sql_mode
:
SET SESSION sql_mode = '';
Můžete jej také rozdělit na 2 dotazy:
- Získejte souhrnná ID a ID příspěvků
- Získejte data příspěvků s načtenými ID (s
IN clause
)