本系列,将介绍一些不同场景下 MySQL 语句的写法,大部分是结合 Laravel 框架的,但是,明白其中的查询原理,才是最关键的。

        描述下本小节介绍的场景:有两张表,用户表( user ),签到记录表( sign )。现在,需要查看用户签到情况。简单分析一下,我是用 sign 表当主表的,这是 sign 表的部分截图:user_id 是 user 表的外键,现在要做的就是,将 user_id 分组,且按 day 字段倒叙排序查出来。

    关键代码
Sign::select(DB::raw(id,max(user_id) as user_id,max(`day`) as `day`))
->with(['user'=>function($query){
$query->select(['id', 'name', 'sign_day', 'test']);
}])
->groupBy('user_id')
->orderBy('day', 'desc')->paginate();

其中, DB::raw(id,max(user_id) as user_id,max(`day`) as `day`)  ,将 id,user_id 和最大的 day 查找出来,最后再做 groupBy 和 orderBy 操作。就是我们预期的数据了。如果大家,还有其他的写法,欢迎在评论区里讨论。

    由于能力有限,不足或有不解之处,希望在下方评论区与我讨论,共同提高 。