MySQL データベースにコメントを保存するために使用する 2 つのテーブルがあります。
1 つ目は、コメント ID、コメントが投稿されたページ、コメントを書いたユーザー、別のコメントへの返信であるかどうか (それぞれ以下) を格納します。
Comments
---------------------------------
CommentId BIGINT PK,NN,AI
OwnerId BIGINT
AuthorId BIGINT
ParentId BIGINT
Created TIMESTAMP
2 つ目は、コメントの内容を格納します。
CommentsContent
----------------------------------
ContentId BIGINT PK,NN,AI
CommentId BIGINT
Content TEXT
Created TIMESTAMP
したがって、Comments
次のレコードがあるとします。
CommentId OwnerId AuthorId ParentId Created
-----------------------------------------------------------
1 1 2 0 2013-01-31 01:23:45
2 1 2 0 2013-01-31 01:23:45
CommentsContent
コメントの編集履歴を示す次のレコードがあります。
ContentId CommentId Content Created
-----------------------------------------------------------
1 1 Testing 2013-01-31 01:23:45
2 2 Another test 2013-01-31 01:23:45
3 1 Testing1 2013-01-31 01:23:46
4 1 Testing123 2013-01-31 01:23:47
Created
ここで、最新のコメントとその最終更新日 ( の列)を取得したいと考えていますCommentsContent
。
私は試した:
SELECT
c.CommentId,
c.AuthorId,
c.ParentId,
c.Created,
cc.Created as Updated,
cc.Content
FROM
Comments as c
JOIN
CommentsContent as cc
ON
cc.CommentId = c.CommentId
WHERE
c.OwnerId = 1
残念ながら、それはデータが前に追加されたすべての行を返しCommentsContent
ますComments
。
次の出力を探しています。
CommentId AuthorId ParentId Created Updated Content
-------------------------------------------------------------------------------------
1 2 0 2013-01-31 01:23:45 2013-01-31 01:23:47 Testing123
2 2 0 2013-01-31 01:23:45 2013-01-31 01:23:45 Another test
これは、ネストされた を埋め込むことなく、単一のクエリで可能ですかSELECT
? GROUP
句を使用する必要がありますか? GROUP
ただし、句のパフォーマンスが低いと聞いたことがあります。GROUP
句を高速化するために追加の索引を作成する必要がありますか?
入力していただきありがとうございます!