分组中取最大、最小记录

laravel8 如何查询订单表里所有用户的最早那条订单记录

订单表字段
:id
:user_id (分组字段)
:order_num
:apply_at 订单申请时间(排序字段)
:expire_at 订单到期时间

求助,语法怎么写;
对于踩到这个坑的小伙伴点着赞吧👍

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

使用模型的查询语句:

return static::query()
            ->select('id','user_id','order_num','apply_at','expire_at')
            ->whereRaw("id in (select min(id) from sgo_orders group by user_id)")->limit(5)->get();

补充:绕过模型关联查询,使用 Db 的数据库查询

return DB::table('sgo_orders')
            ->select('id','user_id','order_num','apply_at','expire_at')
            ->whereRaw("id in (select min(id) from sgo_orders group by user_id)")
            ->limit(10)
            ->get()
3年前
讨论数量: 6

select * from orders where user_id=123 order by created_at desc limit 1

3年前 评论
arvin-hermit (作者) 3年前
uniquespider (楼主) 3年前
deatil 3年前
uniquespider (楼主) 3年前
// try
Order::query()->whereRaw("id in (select min(id) from orders group by user_id)")->get();
3年前
chowjiawei

要不要来个简单点的,减少点数据库压力的那种

查出订单表所有的用户 id,然后去重 得到一个不重复的有订单的用户 id 数组

循环把每个用户最早的查出来,给新数组

$userIds=['123','12324'];

foreach($userIds as $userId){

       $data[$userId][]=Order::where('user_id',$userId)->latest()->first()
}
3年前 评论
uniquespider (楼主) 3年前
chowjiawei (作者) 3年前
fffswhk 3年前
uniquespider (楼主) 3年前
AloneUtopia

先排序然后用子查询

3年前

原生:SELECT id,user_id, min (apply_at) from orders GROUP BY user_id

DB:DB::table(‘orders’)->select(DB::raw(‘id, user_id, min(apply_at)’))->groupBy(‘user_id’)

min 取最小的 apply_at 值,你这值肯定是时间戳吧,时间戳最小就是最早的

3年前

使用模型的查询语句:

return static::query()
            ->select('id','user_id','order_num','apply_at','expire_at')
            ->whereRaw("id in (select min(id) from sgo_orders group by user_id)")->limit(5)->get();

补充:绕过模型关联查询,使用 Db 的数据库查询

return DB::table('sgo_orders')
            ->select('id','user_id','order_num','apply_at','expire_at')
            ->whereRaw("id in (select min(id) from sgo_orders group by user_id)")
            ->limit(10)
            ->get()
3年前