laravel数据库查询max(date)获取所有帖子

时间:2017-04-08 16:48:41

标签: php mysql sql laravel-5

我正在使用Laravel 5.4,我尝试获取最新帖子,但出于某种原因,如果我想选择标题,我最终得到它们,有人可以解释我,为什么我在使用时收到所有帖子

$latest = Post::selectRaw('title, max(created_at), body as MaxDate')
        ->groupBy('title', 'MaxDate')
        ->get();

但是当我使用

$latest = Post::selectRaw('user_id, max(created_at), body as MaxDate')
        ->groupBy('user_id', 'MaxDate')
        ->get();

我只收到最新的帖子。如果我想选择标题,为什么会搞砸? :/

1 个答案:

答案 0 :(得分:2)

那是因为在你的第一个例子中,你是在对MySQL说:"对于每个标题和每个机构,给我最大的创建日期",这很可能是唯一的创建日期对于那个头衔/身体组合。

换句话说,您要为某些内容(标题和正文)进行分组,但在您生成的所有群组中,您不会聚合任何内容,因为每个群组的创建日期会有所不同。< / p>

我不了解Laravel,但如果你想要的是获得最新帖子的标题,那么SQL查询就是

select  title
from    yourTable
where   created_at = (
            select  max(created_at)
            from    yourTable
        )

如果您想要每个用户的最新帖子的标题,则查询将是

select  user_id, title
from    yourTable t1
join    (
            select  user_id, max(created_at) as created_at
            from    yourTable
            group by user_id
        ) t2
on      t1.user_id = t2.user_id and
        t1.created_at = t2.created_at