0

コマンドでグループ化しようとしています。基本的には、ユーザーのすべてのメッセージを選択し、件名でグループ化してから表示しようとしています-フェイスブックと同じように。

結果には、最新のメッセージ ID、送信者の ID、日付、およびその件名のメッセージの総数が含まれているはずです。

メッセージ テーブルは次のようになります。

メッセージ
-------
ID
送信者 ID
主題
created_at

したがって、結果には、同じ件名でグループ化されたすべてのユーザーのメッセージが表示されます。

4

1 に答える 1

1
SELECT sender_ID, subject, MAX(id), MAX(created_at), COUNT (id) 
FROM message 
WHERE recipient_id = current_user_id OR sender_id = current_user_id
GROUP BY subject, sender_ID, receipient_id
ORDER BY MAX(created_at) DESC

GROUP BYを使用する場合、GROUP BY句に含まれていないものはすべて、SELECTステートメントの集計関数(COUNT、SUM、MAXなど)に含まれている必要があります。

編集-上記のGroupByは、私が望むことを完全には実行しないことに気づきました(例の結果セットが役立つでしょう)ので、これを単純化することを考えました。メッセージの作成時に、追加の列値(conversation_id)を設定できますか。これは、新しいメッセージが作成されて応答に再利用されるときに、新しい値に割り当てられます。次に、group Byconversation_idを使用して、メッセージを希望どおりの方法でグループ化できます。

于 2010-02-26T13:56:46.763 に答える