2012-02-25 86 views
6

私はソーシャルネットワーキングサイトを持っており、クエリに苦労しています。私は、すべてのユーザーの投稿を保持する投稿テーブルを持っているし、投稿のすべてのコメントを保持するpost_commentsテーブル。 post_commentsテーブルから最新のコメントを投稿で検索しようとしています。 post_commentsテーブルには、次のカラムがあります。これは、ほとんど何をしMySQLがグループの最新レコードを取得します

SELECT * FROM post_comments GROUP BY post_id 

post_comment_id、 post_idの、 writer_user_id、 post_comment_content、 日時

は、私はそうのようにpost_idで結果をグループ化してきました私は欲しいが、常に最新のものではなく、各投稿について最も古いコメントを返す。各投稿の最新のコメントを返すにはどうすればよいですか?

+0

@alexisからの回答は最高です...この質問が「回答なし」リストに表示されないように、それを受け入れたとマークする必要があります。 –

答えて

-3

ソート済み!

SELECT * FROM (
    SELECT * FROM post_comments ORDER BY datetime DESC 
) AS post_comments 
GROUP BY post_id 
16

GROUP BYは集計関数で使用することを意図しています。それ以外の場合は、グループごとに1つの行を任意に選択します。 MySQLは各グループの最初の行を保持しているように見えるので、あなたのソリューション(上記の自己解答の中にあります)は機能しますが、これは常に起こるという保証はありません。

post_idの最新のコメントの日付をこのように取得することができます。 「私はのために...最新のエントリをしたい」

SELECT t1.* FROM post_comments AS t1 
JOIN (
    SELECT post_id, MAX(datetime) AS latest FROM post_comments GROUP BY post_id 
) AS t2 
ON t1.post_id = t2.post_id AND t1.datetime = t2.latest 
+1

これは、このようなクエリを処理する正しい方法です。 –

2

ように多くの質問がでてくる、といくつかの日付の時間を持っている:

select post_id, MAX(datetime) as latest from post_comments group by post_id 

最新のコメントを選択するために使用します。問題のテーブルが自動インクリメントで、日付/時刻スタンプが常に連続時間相関にとどまっている場合、つまり、今日のエントリに日付を入れるレコードのタイムスタンプを編集または変更する機会がユーザーにない3週間前の...多くの人が最後の日付を取得し、非優位なキーに再参加しようとします。ポストの最大IDキーを取得して使用してください...私はポストIDとプライマリの自動インクリメントキーのインデックスを持っています。

select 
     P2.* 
    from 
     (select post_id, max(post_comment_id) as LastPost 
      from post_comments 
      group by post_id) LastPerPost 
     JOIN post_comments P2 
      on LastPerPost.LastPost = P2.post_comment_id 
+0

これは、デュアルマスタレプリケーションなどの特定のケースでは機能しない可能性があります。 –

+0

@ypercube、その用語に精通していない、それを調べて、あなたは正しいですし、 "日付で"代替手段はよりよいアプローチだろう。 – DRapp

+0

データを挿入する接続が複数ある場合、1つのサーバーで異なる注文が発生する可能性があるかどうかはわかりません。おそらく、タイムスタンプではないでしょう。おそらく、アプリケーションによって提供されるdatetimes(クロックを完全に同期させていない可能性があります)を持つでしょう。とにかく、あなたの答えは1台のサーバにとっては良いことです(100%の正確な結果を得られない可能性もあります)。効率が重要な場合(また、datetimeカラムにインデックスを追加できない場合)、これはおそらく最適なクエリです。 –

関連する問題