Всяко неагрегирано поле трябва да бъде групирано.
Това е стандартно поведение, което в mysql зависи от режима ONLY_FULL_GROUP_BY.
Този режим е активиран по подразбиране в>=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
Или можете да aggregate
то:
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
Друг начин - променете sql_mode
:
SET SESSION sql_mode = '';
Освен това можете да го разделите на 2 заявки:
- Вземете обобщени и публикувани идентификатори
- Вземете данни за публикации с извлечени идентификатори (с
IN clause
)