1

xmpp サービス内で送信されたすべてのメッセージを格納するテーブルが 1 つあります。すべての会話とその最初のメッセージ (チャット ログの whatsapp など) を取得するためのクエリを作成しようとしています。

これが私のテーブルです。

ここに画像の説明を入力

FromPersonIdおよびToPersonIdは人々の ID です。私がしていることは、たとえば、 personId = 643 のすべての会話を見たいということです

SELECT DISTINCT MA.FromPersonId, MA.ToPersonId, MAX(MA.SENTDATE) AS [Date], Body
    FROM MessageArchive AS MA
    WHERE MA.FromPersonId = @personId OR MA.ToPersonId = @personId
    GROUP BY MA.FromPersonId, MA.ToPersonId, Body
    ORDER BY [Date] DESC

上記は私が持っているものです。そして結果は

ここに画像の説明を入力

ご覧のとおり、結果は同じ会話に対するものです。しかし、同じ人が別の立場にいるため、同じ会話であるかどうかを区別することはできません。

どうすればこれを修正できますか?

4

2 に答える 2

0

会話エンティティとメッセージ エンティティの間に存在する「1 対多」の関係の明示として、会話 ID フィールドが MessageArchive テーブルの外部キーである「会話」テーブルがありません: 1 つの会話が少なくとも保持されます1 つのメッセージであり、各メッセージは 1 つだけの会話に関連しています。

このようなデータベース モデルを使用すると、各会話の「トップ 1」メッセージを収集できます。

于 2013-10-19T06:32:50.337 に答える