2016-04-15 2 views
0

ユーザーエンティティと投稿エンティティの間にoneToMany関係があります。各ユーザは、自分が望むようにマントポストを作成することができます。テーブルは次のようになります:コンテンツを作成した最後のユーザーを日付順に取得する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を追加すると、結果はユーザーごとに1行だけになりますが、順序は異なります。私は何が欠けていますか?

私は最終目標を達成するためにはJOINが必要だと思っていますが、まずこの最初の部分の解決策を見つける必要があります。あなたの助けが大変ありがとうございます。

+0

最新の30の投稿とそれに対応するユーザーを意味しますか? –

+0

@vkp。ご意見ありがとうございます。投稿を作成した最新の30人のユーザーを意味します。私は彼らの最後の投稿の日付のユーザーのテーブルが必要です。 –

+0

post_user_idは投稿のフィールドではありません。あなたは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とSELECT *、uは INNER JOINをAS fos_user FROM t.maxdt(post_user_id でポスト グループからmaxdt としてpost_user_id、MAX(post_date)を選択しますmaxdt desc順)AS t ON u.id = t.post_user_id 'です。もう一度ありがとう –

関連する問題