Jedes nicht aggregierte Feld sollte gruppiert werden.
Dies ist ein Standardverhalten, das in mysql vom Modus ONLY_FULL_GROUP_BY abhängt.
Dieser Modus ist in>=5.7
standardmäßig aktiviert .
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
Oder Sie können aggregate
es:
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
Andere Möglichkeit - sql_mode
ändern :
SET SESSION sql_mode = '';
Sie können es auch in 2 Abfragen aufteilen:
- Aggregierte und Beitrags-IDs erhalten
- Beitragsdaten mit abgerufenen IDs abrufen (mit
IN clause
)