エントリのコメントを一覧表示し、ユーザーが既存のコメントを編集できるようにし、それらのリビジョンを追跡します。
テーブル構造:
コメント: 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
)