分组中取最大、最小记录

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

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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!