每组按 updated_at 排序
Ordering by updated_at per group
我有以下简单查询来尝试获取每个 module
的最后更新行:
$distincts = SerialNumber::where('company_id', Auth::user()->active_company_id)
->groupBy('module')
->orderBy('updated_at', 'desc')
->get();
这不符合我的要求。 module
组中的每一行都不会按 updated_at
(这是一个日期时间戳)排序。
如何对组中的每一行使用 orderBy
?感谢阅读!
下面的方法有效,但这是一个非常糟糕的解决方案:
$distincts = array();
$modules = SerialNumber::select('module')
->where('company_id', Auth::user()->active_company_id)
->groupBy('module')
->pluck('module');
foreach ($modules as $mod) {
$se = SerialNumber::where('company_id', Auth::user()->active_company_id)
->where('module', $mod)
->orderBy('updated_at', 'desc')
->first();
$distincts[] = $se;
}
你需要的是一个子查询:
$query = SerialNumber::orderBy('updated_at', 'desc')->getQuery();
$distincts = DB::table(DB::raw("(". $query->toSql() . ") as subQuery"))
->where('company_id', Auth::user()->active_company_id)
->groupBy('module')
->get();
这使得您只能获取组中的最新记录。
我有以下简单查询来尝试获取每个 module
的最后更新行:
$distincts = SerialNumber::where('company_id', Auth::user()->active_company_id)
->groupBy('module')
->orderBy('updated_at', 'desc')
->get();
这不符合我的要求。 module
组中的每一行都不会按 updated_at
(这是一个日期时间戳)排序。
如何对组中的每一行使用 orderBy
?感谢阅读!
下面的方法有效,但这是一个非常糟糕的解决方案:
$distincts = array();
$modules = SerialNumber::select('module')
->where('company_id', Auth::user()->active_company_id)
->groupBy('module')
->pluck('module');
foreach ($modules as $mod) {
$se = SerialNumber::where('company_id', Auth::user()->active_company_id)
->where('module', $mod)
->orderBy('updated_at', 'desc')
->first();
$distincts[] = $se;
}
你需要的是一个子查询:
$query = SerialNumber::orderBy('updated_at', 'desc')->getQuery();
$distincts = DB::table(DB::raw("(". $query->toSql() . ") as subQuery"))
->where('company_id', Auth::user()->active_company_id)
->groupBy('module')
->get();
这使得您只能获取组中的最新记录。