分组中取最大、最小记录

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

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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

使用模型的查询语句:

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()
2年前
讨论数量: 6

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

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

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

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

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

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

foreach($userIds as $userId){

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

先排序然后用子查询

2年前

原生: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值,你这值肯定是时间戳吧,时间戳最小就是最早的

2年前

使用模型的查询语句:

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()
2年前

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