2

私は次のクエリを持っています:

SELECT f.name, MAX( cmt.created_at ) AS CommentDate, cmt.comment AS LastComment
FROM families f
LEFT JOIN comments cmt ON f.id = cmt.commentable_id
WHERE f.id =12212

コメントの最後の日付を取得しますが、(その日付に従って)最後のコメントを取得する代わりに、最初のコメントを取得します。どうですか?

4

3 に答える 3

1

それはまさにあなたのクエリが求めているものです:あなたは名前、最大コメント日、そして結合された最初のコメント(この場合、たまたま最初のものです)を選択しています。最新のコメントを取得するには、そこに追加のロジックを配置する必要があります。

SQLフレーバーが異なれば、これを行う方法も異なりますが、どこでも機能するはずです。

select    f.name,
          cmt.created_at as CommentDate,
          cmt.comment as LastComment
from      families f
left join comments cmt
on        cmt.commentable_id = f.id
left join comments latest_cmt
on        latest_cmt.commentable_id = f.id
and       latest_cmt.created_at > cmt.created_at
where     f.id = 12212
and       latest_cmt.id is null;

コメントテーブルにはid主キーとしてフィールドがあると想定しています。

于 2013-03-07T13:26:30.500 に答える
1

この方法を試してください:

SELECT f.name, cmt.created_at AS CommentDate, cmt.comment AS LastComment
FROM families f
LEFT JOIN comments cmt ON f.id = cmt.commentable_id
WHERE f.id =12212
and cmt.created_at = (
                        SELECT MAX( cmt.created_at ) 
                        FROM families f
                        LEFT JOIN comments cmt ON f.id = cmt.commentable_id
                        WHERE f.id =12212
                      )

また

SELECT f.name, cmt.created_at AS CommentDate, cmt.comment AS LastComment
FROM families f
LEFT JOIN comments cmt ON f.id = cmt.commentable_id
WHERE f.id =12212
and cmt.created_at = (
                        SELECT MAX( created_at ) 
                        FROM comments
                        WHERE commentable_id =12212
                      )
于 2013-03-07T13:19:00.473 に答える
1

Sql-Serverを使用していると仮定すると、グループ化が行われていないため、クエリは機能しないはずです。

私はあなたが必要なのはTOP(1) 注文後 cmt.created_at DESCに取るということだと思います;

SELECT TOP (1) f.name, cmt.created_at AS CommentDate, cmt.comment AS LastComment
FROM families f
LEFT JOIN comments cmt ON f.id = cmt.commentable_id
WHERE f.id =12212
ORDER BY cmt.created_at DESC

LIMITmysqlの場合、代わりに使用できると思いますTOP

SELECT f.name, cmt.created_at AS CommentDate, cmt.comment AS LastComment
FROM families f
LEFT JOIN comments cmt ON f.id = cmt.commentable_id
WHERE f.id =12212
ORDER BY cmt.created_at DESC
LIMIT 1
于 2013-03-07T13:19:07.053 に答える