1

エントリのコメントを一覧表示し、ユーザーが既存のコメントを編集できるようにし、それらのリビジョンを追跡します。

テーブル構造:

コメント: ID、概要

リビジョン: comment_id、revision_id、タイムスタンプ

Revisions.comment_id = コメント.id

Revisions.revision_id = 新しいコメントの ID、詳細な説明: 既存のコメントを選択すると、編集フォームが表示され、新しいコメントを入力して送信できます。それを新しいコメントとしてコメント テーブルに挿入し、そのテーブルから最後の ID を取得して、リビジョン テーブルで Revision_id として設定します。

リビジョン テーブルで個別の選択を実行したい (複数の comment_id、revision_id をアプリケーション内で使用する配列に取得するため):

例えば:

select distinct comment_id from revisions

しかし、最新のコメント (revisions.timestamp) に基づいて適切なレコードを選択することは可能ですか?

理論的には:

タイムスタンプが最も大きいリビジョンから個別の comment_id を選択します

リビジョン テーブルの例:

comment_id   revision_id   timestamp
         2            12   20120222180000
         2            13   20120222170000
         5            18   20120222190000
         5            19   20120222200000

この 4 行の例では、クエリが 2 行を返すようにします。

それは:

comment_id = 2、revision_id = 12 タイムスタンプ = 20120222180000

comment_id = 5、revision_id = 19 タイムスタンプ = 20120222200000

更新:これでうまくいくようですが、もっと良い方法があれば教えてください

SELECT 
 distinct comment_id, max(timestamp)
FROM
 revisions 
GROUP BY
 comment_id

更新:revision_idも含める必要があります。上記のクエリにはcomment_idとtimestampのみが含まれます

これでできました:

SELECT 
 distinct a.comment_id as comment_id, 
 a.revision_id revision_id,
 a.timestamp as timestamp
FROM
 REVISIONS a 
WHERE
 a.timestamp = ( 
 SELECT
  max(b.timestamp)
 FROM
  revisions b
 WHERE
  b.comment_id = a.comment_id
)
4

1 に答える 1

0

私があなたを正しく理解していれば、タイムスタンプで降順に並べ替えて、最初の結果を取得するだけです。

SELECT comment_id FROM revisions ORDER BY timestamp DESC LIMIT 0,1

編集:私は今、あなたが本当に欲しいものを理解していると思います、これを試してください:

SELECT * FROM revisions GROUP BY comment_id ORDER BY timestamp DESC  
于 2012-02-22T19:36:41.937 に答える