Varje icke aggregerat fält bör grupperas.
Det är standardbeteende, som i mysql, beror på ONLY_FULL_GROUP_BY-läget.
Det här läget är standardaktiverat i>=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
Eller så kan du aggregate
det:
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
Annat sätt - ändra sql_mode
:
SET SESSION sql_mode = '';
Du kan också dela upp det i 2 frågor:
- Hämta samlade och inläggs-id
- Få inläggsdata med hämtade ID (med
IN clause
)