1

ユーザーが互いにメッセージを送信できるようにする単純な Web アプリケーションがあります。ユーザーは受信トレイを表示してメッセージを表示できます。受信トレイは、送信者ごとにグループ化され、その送信者からの最新のメッセージの日付と、受信トレイの既読ステータスによって並べ替えられます。

クエリは正常に機能していると思っていましたが、一部のメッセージの順序が正しくないことに気付きました! メッセージを返すことで、グループが原因であると確信しています... とにかく、これについてはありますか?

このフィドルを見てください: http://sqlfiddle.com/#!2/565c6/1

並べ替えられた受信トレイの最後のメッセージには、実際には最新のメッセージがありますが、受信トレイ ビューの一番下にあります!

4

3 に答える 3

2

グループごとの最大値を探していると思います:

SELECT *
FROM who_messages wm1
WHERE wm1.sent = (
  SELECT MAX(sent)
  FROM who_messages wm2
  WHERE wm2.from_userid = wm1.from_userid
    AND wm2.to_userid = 41
)
ORDER BY wm1.is_read ASC, wm1.sent DESC;

SQLフィドル

または、相関サブクエリなし:

SELECT *
FROM who_messages wm1
JOIN (
  SELECT from_userid, MAX(sent) as sent
  FROM who_messages
  WHERE to_userid = 41
  GROUP BY from_userid
) wm2 ON wm1.from_userid = wm2.from_userid AND wm1.sent = wm2.sent
ORDER BY wm1.is_read ASC, wm1.sent DESC;

SQLフィドル

于 2013-02-13T22:26:01.610 に答える
0

このようなことを意味しますか?http://sqlfiddle.com/#!2/565c6/20 サブクエリ内で ID で逆ソートしました。

于 2013-02-13T22:25:50.757 に答える
-1

結果がどのようにソート/グループ化されると予想されるか、送信者をソートする必要があるか、または常に特定の送信者にフィルタリングするかは特に明確ではありませんか?

スワッピング

m.sent DESC

為に

m.sent ASC

フィドルの結果の一番上に最新のメッセージが表示されます。

于 2013-02-13T22:25:18.640 に答える