0

簡単な質問ですが、それぞれにタイムスタンプ、reply_id、topic_id を含むメッセージのテーブルがあります。Reply_ids は他のメッセージと同じにすることができます。つまり、これらのメッセージは同じグループの返信に含まれます。最小のタイムスタンプを持つ reply_id を選択すると、それがそのグループの最初のメッセージであることを意味します。3番目(3)4番目(4)など。これを行う方法を知っている人はいますか、何か提案がありますか?これは純粋なSQLで実行できますか?

SELECT reply_id,min(timestamp) as min FROM messages
   WHERE reply_chunk_id = ?
     AND topic_id = ?
4

1 に答える 1

1

純粋な SQL を使用する:

SELECT m.reply_id,
       MIN(m.timestamp) as min,
       (SELECT COUNT(*)
          FROM MESSAGES t
         WHERE t.id <= m.id) AS rank
  FROM MESSAGES m
 WHERE m.reply_chunk_id = ?
  AND m.topic_id = ?

これreplyidは、一意の値の場合にのみ機能します。replyidの前に重複がある場合replyid、COUNT はそれを見逃します。

MySQL がサポートしていない分析関数を使用することをお勧めします。MySQL SELECT ステートメントで変数を使用して機能を再作成できます。

于 2010-09-25T19:36:27.833 に答える