2016-04-15 24 views
0

我在用戶實體和發佈實體之間具有一對多關係。每個用戶可以創建他想要的垃圾帖子。表看起來像:用於獲取創建按日期排序的內容的最後一個用戶的SQL查詢

User(id, name) 

Post(id, post_owner_id, content, date) // post_owner_id is the foreign key 

我的目標是獲取創建帖子的最後用戶。我開始:

SELECT * 
FROM `post` 
ORDER BY post_date DESC 
LIMIT 0 , 30 

它是給我正確的結果。但是,當我添加GROUP BY post_user_id時,它會將結果縮減爲每個用戶只有一行,但日期無序。我錯過了什麼?

我相信我需要一個JOIN來獲得最終目標,但我需要首先找到第一部分的解決方案。非常感謝您的幫助。

+0

您的意思是最新的30條信息和相應的用戶? –

+0

@vkp。感謝您的反饋意見。我的意思是最近30個創建帖子的用戶。我需要一張用戶名和他們上一篇文章的日期。 –

+0

post_user_id不是Post中的字段。我假設你的意思是post_owner_id? –

回答

1

我需要一個用戶的表以及他們上一篇文章的日期。

SELECT post_owner_id, max(date) as maxdt 
FROM `post` 
group by post_owner_id 
order by maxdt desc 
limit 0,30 

select id, maxdt, name 
from (
SELECT post_owner_id, max(date) as maxdt 
FROM `post` 
group by post_owner_id) t join `User` u on u.id = t.post_owner_id 

你甚至不需要子查詢。

SELECT u.id, u.name, max(p.`date`) as maxdt 
FROM `post` p 
JOIN `User` u on u on u.id = p.post_owner_id 
group by u.id, u.name 
+0

對不起,我沒有寫出最準確的評論。事實上,我需要一份「所有信息的用戶列表+他們最後一篇文章的日期」。我相信最大聚合函數會做到這一點,但如何獲取用戶的名字。不要加入這個與另一個查詢是答案?再次感謝 –

+0

請參閱編輯答案。我認爲那是你需要的。 –

+0

是的,先生,完美的到底是什麼我來這裏之前做:'選擇U *,t.maxdt FROM fos_user爲u INNER JOIN(由post_user_id 選擇post_user_id,MAX(POST_DATE)作爲maxdt FROM後 組order by maxdt desc)AS t ON u.id = t.post_user_id '。再次感謝先生 –

相關問題