如何查找在laravel中最近24小时内创建帖子数量最高的用户? 按帖子数降序排列。
答案 0 :(得分:4)
如果我没记错的话,您是在问过去24小时内创建帖子数量最多的用户。
要实现此目的,请执行以下操作:
$users = User::withCount(['posts' => function ($query) {
$query->where('created_at', '>=', carbon()->now()->subDay());
}])->orderBy('posts_count', 'DESC')
->get();
如fseek()
所述,您可以向查询添加约束。
计算相关模型
如果您想计算某个关系中的结果数而不实际加载它们,则可以使用
withCount
方法,该方法会将{relation}_count
列放在 您生成的模型。例如:$posts = App\Post::withCount('comments')->get(); foreach ($posts as $post) { echo $post->comments_count; }
您可以添加多个关系的“计数”,也可以添加 查询约束:
$posts = Post::withCount(['votes', 'comments' => function ($query) { $query->where('content', 'like', 'foo%'); }])->get(); echo $posts[0]->votes_count; echo $posts[0]->comments_count;
答案 1 :(得分:1)
在常规SQL语法中,您需要以下内容:
SELECT COUNT(id), user_id
FROM posts
WHERE created_at = today
GROUP BY user_id
ORDER BY COUNT(user_id) DESC
LIMIT 1;
它获取所有帖子,按user_id
分组,对user_id
最高的帖子进行排序,并获得第一条记录。
我绝不是SQL方面的专家,更不用说Laravel中的查询生成器了,所以其他人可能会写得更好。
我知道您可以通过使用Carbon获得今天创建的帖子,如下所示:
Post::whereDate('created_at', Carbon::today())->get();
编辑:这可能对您有用:
$last24h = Carbon::now()->subDay();
DB::table('posts')
->select(array(DB::raw('COUNT(id)', 'user_id')))
->where('created_at', '>=', $last24h)
->groupBy('user_id')
->orderBy('COUNT(id)', 'DESC')
->limit(1)
->get();
请确保包含use Carbon\Carbon
才能使用Carbon。
这应该为您提供帖子数量和相应的用户ID。
答案 2 :(得分:1)
use Carbon\Carbon;
获取用户ID:
$minusday = Carbon::now()->subDay();
$user_id = DB::table('posts')
->select('user_id', DB::raw('count(id) as total'))
->where('created_at', '>=', $minusday)
->groupBy('user_id')
->orderBy('total','desc')
->limit(1)
->get();