2017-04-08 114 views
0

我正在使用Laravel 5.4,在那裏我試圖得到最新的帖子,但由於某種原因,如果我想選擇標題,我最終得到他們所有人,可以有人解釋我,爲什麼我得到的所有帖子,當我使用laravel數據庫查詢最大(日期)獲取所有文章

$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

使用'第()',而不是'得到()' –

+0

它的工作,但我希望得到它與SQL查詢:) – KaZyKa

回答

2

這是因爲在你的第一個例子中,你對MySQL說:「對於每個標題和每個正文,給我最大創建日期」,這很可能是該標題/正文組合的唯一創建日期。

換句話說,您正在爲某些內容(標題和正文)進行分組,但是在您生成的所有組中,您並未彙總任何內容,因爲每個組的創建日期都不相同。

我不知道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 
+0

THX工作,您的查詢的作品。 – KaZyKa

相關問題