mysql - 获取当周用户的最高分 Laravel
问题描述
我有一个具有以下值的表“分数”
id user_id score created_at updated_at
43 33 88 2020-02-23 00:00:00 NULL
44 33 89 2020-02-24 00:00:00 NULL
45 33 42 2020-02-24 00:00:00 NULL
46 33 86 2020-02-25 00:00:00 NULL
47 33 100 2020-02-04 00:00:00 NULL
我正在尝试在本周打印特定用户的最高分。我正在使用以下代码。
$week = GameScore::whereDate('created_at', '>=', Carbon::now()->startOfWeek()->format('Y-m-d H:i:s'))
->whereDate('created_at', '<=', Carbon::now()->endOfWeek()->format('Y-m-d H:i:s'))
->where('user_id', $user->id)
->orderBy('score','desc')
->limit(1)
->first();
当我运行上面的代码时,我得到 86 作为结果。
"result": {
"id": 46,
"user_id": 33,
"score": 86,
"created_at": "2020-02-24 18:30:00", //this date is not correct for score 86 as per the table
"updated_at": null
}
但是如果我在 mysql 中运行相同的查询,我会得到 89,根据我的要求,89 应该是答案,因为 89 是本周迄今为止用户的最高分。
我为上述代码运行的 mySql 查询
select * from `scores` where date(`created_at`) >= '2020-02-24 00:00:00' and date(`created_at`) <= '2020-03-01 23:59:59' and `user_id` = 33 order by `score` desc limit 1
解决方案
Laravel
您可以使用eloquent 的->max('')
功能链接您的查询。它以列名作为参数。
您的查询应如下所示:
$week = GameScore::whereDate('created_at', '>=', Carbon::now()->startOfWeek()->format('Y-m-d H:i:s'))
->whereDate('created_at', '<=', Carbon::now()->endOfWeek()->format('Y-m-d H:i:s'))
->where('user_id', $user->id)
->max('score');
推荐阅读
- android - MVVM:从服务器获取数据并通知项目
- c# - Azure 函数未将消息发布到服务总线
- php - Drupal 8 的新手 - 在页面内容中使用 PHP 脚本?
- javascript - 无法将 eventListener 添加到通过 JavaScript 创建的 div
- python-3.x - 队列与不同进程之间的线程相结合的问题
- swift - 搜索控制器未显示
- java - Groovy 在 Java Optional 上同时运行 map 和 orElseGet
- angular - ngDocheck 和 ngOnchanges 的特定用例
- facebook - 没有在 Facebook Graph API 中获取朋友评论数据
- svg - 如何仅使用内联 SVG 在鼠标悬停时反转线性渐变动画