我有这张桌子:
许可表
id parent_id user_id renewed_at
1 0 1 2019-01-01
2 0 8 2019-01-01
3 1 7 2019-01-02
4 1 2 2019-01-03
5 2 3 2019-01-02
6 0 2 2019-01-02
7 6 9 2019-01-03
8 2 2 2019-01-09
9 0 3 2019-01-10
10 9 2 2019-01-11
11 9 5 2019-01-12
parent_id
栏中指示的许可续签。
问题是许可证可以由user_id
字段中指示的不同人员续签。如果用户是最新的续签用户,则可以将其视为许可证的所有者。
如何构建优化的口才查询,该查询将获取特定人员拥有的所有许可,例如= ID为2的用户
我所做的是:
获取所有最新记录
如果user_id = 2
这里的问题是该表有10万行,这使我的查询非常昂贵。
更新1:
$records_raw = Permits::groupBy('parent_id')
->where('parent_id', '>', 0)
->get([DB::raw('MAX(id) as id')])
->pluck('id');
$my_permits = Permits::where('user_id', Auth::id())
->whereIn('id', $records_raw)
->get();
答案 0 :(得分:0)
您可以使用laravel Eloquent
例如,您想要用户2的最后一条记录(user_id = 2)
$user_id = 2;
Permits::where('user_id',$user_id)->orderBy('renewed_at','desc')->first();
它获取为user_id = 2添加的最新记录。....意味着记录8
8 2 2 2019-01-09
这是优化查询,并不昂贵
更新:
$user_id = 2;
Permits::where('user_id',$user_id)->where('parent_id','!=',0)->orderBy('renewed_at','desc')->get();
这将返回您想要的内容
希望这会有所帮助
答案 1 :(得分:-1)