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

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

求助,语法怎么写

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
// try
Order::query()->whereRaw("id in (select min(id) from orders group by user_id)")->get();
1周前 评论
讨论数量: 6

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

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

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

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

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

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

foreach($userIds as $userId){

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

先排序然后用子查询

1周前 评论

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

1周前 评论

使用模型的查询语句:

$field是需要查询的字段
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($field);

补充:绕过模型关联查询,使用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()
1周前 评论

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