gpt4 book ai didi

php - mysql查询中出现 "isn' t in GROUP BY”错误如何解决

转载 作者:可可西里 更新时间:2023-11-01 06:32:24 26 4
gpt4 key购买 nike

我有两个模型:postslikings 它们具有一对多关系(因此,一个帖子有很多喜欢)。 Likings 模型还有一个 isActive 字段,它显示喜欢是主动的还是被动的。

我想获得(排序)获得最大“活跃”点赞的前 5 个帖子(仅考虑 isActive 字段为 true 的点赞)。

这是查询:

select posts.*, 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

这是这个 laravel 查询的结果:

Post::selectRaw('posts.*, count(likes.id) as likes_count')
->leftJoin('likes', function ($join) {
$join->on('likes.post_id', '=', 'posts.id')
->where('likes.is_active', '=', 1);
})
->groupBy('posts.id')
->orderBy('likes_count', 'desc')
->take(5)
->get();

这是错误:

SQLSTATE[42000]: Syntax error or access violation: 1055
'database.posts.user_id' isn't in GROUP BY

这里,posts.user_id 也是posts 表的一个字段,显示帖子的所有者。

我该如何解决这个错误?似乎更改 mysql 配置(可能删除 ONLY_FULL_GROUP_BY 模式)是不合逻辑的,但查询中的最小更改。

最佳答案

每个非聚合字段都应该分组。

这是标准行为,在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

或者,您可以聚合它:

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 个查询:

  1. 获取聚合和发布 ID
  2. 使用获取的 id 获取帖子数据(使用 IN 子句)

关于php - mysql查询中出现 "isn' t in GROUP BY”错误如何解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33591606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com