0

私はこれで髪を引っ張ってきました。ユーザーが互いにメッセージを送信できるWebサイト用のメッセージングシステムがあります。現在、受信トレイにはメッセージのリストが表示されます(古い学校のテキストメッセージのように)が、それを作りたいですより現代的で、より Facebook のような感覚を与えます。テーブルは非常に基本的です

id  senderid    recipientid dateadded   message
--------------------------------------------------------------------
1   1              2        2013-04-01  hello1
2   3              2        2013-04-02  hello2
3   1              2        2013-04-03  hello3
4   3              2        2013-04-04  hello4
5   3              2        2013-04-05  hello5
6   4              2        2013-04-06  hello6

今、私が苦労しているのは、メッセージをロードして、最も古いものから新しいものへと並べ替えられたその送信者からのメッセージが追加された最新の日付でそれらをsenderidでグループ化することです

したがって、上の表をこのようにロードしたいと思います

id  senderid    recipientid dateadded   message
--------------------------------------------------------------------
5   3              2        2013-04-05  hello5
4   3              2        2013-04-04  hello4
2   3              2        2013-04-02  hello2
3   1              2        2013-04-03  hello2
1   1              2        2013-04-01  hello1
6   4              2        2013-04-01  hello1

最初に最新のメッセージを持つ送信者 ID など。

これは、他の同様の投稿に基づいて使用していたクエリです

SELECT m.*
FROM messages m 
INNER JOIN (
SELECT senderid, recipientid, dateadded
FROM messages
WHERE recipientid = :user_id
GROUP BY senderid
ORDER BY dateadded DESC
) senders ON m.senderid = senders.senderid
ORDER BY senders.dateadded DESC

残念ながら、そのクエリは機能せず、senderid のみをグループ化します

繰り返しますが、ここでの目標は、ログインしているユーザーに送信されたすべてのメッセージをロードすることですが、senderid とメッセージに追加された最新の日付で並べ替えます。

コメントをお寄せいただきありがとうございます。Stackoverflow は私を大いに助けてくれました。すべての助けに本当に感謝しています。

4

1 に答える 1

0

これはどう?

SELECT senderid, recipientid, MAX(dateadded) AS MAX_dateadded
FROM messages
WHERE recipientid = :user_id
GROUP BY senderid
ORDER BY MAX_dateadded DESC
于 2013-04-08T16:38:34.520 に答える