分组中取最大、最小记录

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

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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《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年前