0

php/mysql でプライベート メッセージ システムを作成しています。

メッセージテーブルを作成しました:

messages(message_id|sender_id|receiver_id|message_text|created_time)

ここに表のデータがあります

message_id|sender_id||receiver_id|message_text|   created_time
   1         101          102       Message A    2012-06-07 08:07:18
   2         101          102       Message B    2012-06-07 08:10:20
   3         103          102       Message C    2012-06-07 08:12:43

私が望む出力は次のとおりです。

     sender_id|message_text |   created_time
       101      Message B     2012-06-07 08:10:20
       103      Message C     2012-06-07 08:12:43

何かのようなもの:

SELECT sender_id,message_text,created_time from messages
WHERE receiver_id='102'
GROUP BY sender_id
ORDERBY BY created_time

ユーザーの最後のメッセージを表示したい。

4

3 に答える 3

3

多分このようなもの:

SELECT
    messages.sender_id,
    messages.message_text,
    messages.created_time
FROM
    messages
    JOIN
        (
            SELECT
                MAX(created_time) AS LatestCreated,
                t.sender_id
            FROM
                messages AS t
            GROUP BY
                t.sender_id
        ) AS Latest
        ON Latest.sender_id=messages.sender_id
        AND Latest.LatestCreated=messages.created_time
WHERE
    messages.receiver_id=102
ORDER BY
    messages.created_time

デモ

于 2012-06-07T09:50:58.353 に答える
2
SELECT sender_id, MESSAGE_TEXT, created_time
FROM messages
WHERE receiver_id = 102
  AND created_time IN
    (SELECT MAX(created_time)
     FROM messages
     GROUP BY sender_id);

デモ

于 2012-06-07T10:16:27.003 に答える
-1

あなたは近かった - あなたは「ORDER BY」を「ORDERBY BY」と入力しました。既に持っている WHERE 句を使用して正しいデータを取得します。また、日付を降順に並べて、最新のものを最初に表示する必要があります (以下のように)。

何らかの方法でデータを集計するよう求めていることはわかりますが、各行が一意であるため、その理由がよくわかりません。

解決

SELECT sender_id, message_text, created_time FROM messages
WHERE receiver_id = 102
ORDER BY created_time DESC
于 2012-06-07T09:49:09.563 に答える