即使有这样的多个问题,我也无法通过查询查询返回带有分组依据的最近日期的行。
我有下表。
| message_id | from | to | created_at | status ---------------------------------------------- | 1 | 1 | 2 | 2017-04-06 | 1 | 2 | 1 | 2 | 2017-04-07 | 0 | 3 | 3 | 4 | 2017-04-06 | 1 | 4 | 3 | 4 | 2017-04-07 | 0 ----------------------------------------------
我正在尝试获取最近日期的行。
| message_id | from | to | created_at | status ---------------------------------------------- | 2 | 1 | 2 | 2017-04-07 | 0 | 4 | 3 | 4 | 2017-04-07 | 0
当前,此查询返回具有最近日期的行。
$messages = Message::where('to', Auth::id()) ->groupBy('from') ->orderBy('created_at', 'DESC') ->paginate(10);
问题在于结果集将被首先 分组 然后 排序 。您可以使用嵌套选择来获取所需的内容。
SQL查询:
SELECT t.* FROM (SELECT * FROM messages ORDER BY created_at DESC) t GROUP BY t.from
使用Laravel:
$messages = Message::select(DB::raw('t.*')) ->from(DB::raw('(SELECT * FROM messages ORDER BY created_at DESC) t')) ->groupBy('t.from') ->get();
您只需要添加where()子句。
where()