我正在使用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();
我只收到最新的帖子。如果我想选择标题,为什么会搞砸? :/
答案 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