0

相対的な最後のメッセージとの会話を取得し、時間順に並べ替えようとしています。メッセージを読んだ場合。私のロジックを見てみましょう。

3 つのテーブルを作成しました: inbox_join / inbox_msg / users

最初のテーブル「inbox join」には、アクティブなディスカッションを行っているユーザーに関するデータがあります。この場合、id_user - "1" と id_user_2 - "4" が会話をしています。

inbox_msg テーブルには、テキスト メッセージ、メッセージが表示される id 会話、およびその他の理解しやすいフィールドがあります。

受信トレイ結合テーブル

ここに画像の説明を入力

Inbox_msg テーブル ここに画像の説明を入力

ユーザー テーブル

ここに画像の説明を入力

私は正常に動作するクエリを作成しましたが、私の問題は、inbox_msg テーブルに occured_at を設定できないことです。希望する結果を得るためのより良い解決策を見つけたいのですが、探している方法を注文できません。

これは私のクエリです

SELECT DISTINCT (
inbox_join.id_conversation
), user_chat.name AS name_conv, user_chat.surname AS surname_conv, user_chat.username as username_conv, user_chat.id as id_chat, image_upload.name_image, (

SELECT DISTINCT (
message
)
FROM inbox_msg
WHERE inbox_join.id_conversation = inbox_msg.id_conversation
ORDER BY occured_at DESC 
LIMIT 1
) AS last_msg, users.name, users.surname
FROM inbox_join

INNER JOIN users ON users.id = inbox_join.id_user
INNER JOIN users AS user_chat ON user_chat.id <> 1 AND (inbox_join.id_user_2 = user_chat.id || inbox_join.id_user = user_chat.id)
INNER JOIN image_upload ON image_upload.id_image = user_chat.profile_image
WHERE inbox_join.id_user = 1
OR inbox_join.id_user_2 = 1

ユーザー 1 に関する会話を選択する際に必要な結果:

id_conversation | id_user | name | surname | username | last_msg | occured_at_last_msg | read_msg |

       1           4         E        S         E           Yes            1380724676        0
       4           5         G        E         K           Good           1380724675        0
4

2 に答える 2

1

クエリ:

SELECT  im.id_conversation,
        im.id_user,
        u.name,
        u.surname,
        u.username,
        im.message AS last_msg,
        im.occured_at AS occured_at_last_msg,
        im.read_msg 
FROM inbox_msg im
JOIN users u
ON u.id_user = im.id_user
JOIN (SELECT id_conversation,
             MAX(occured_at) AS occured_at
      FROM inbox_msg
      GROUP BY id_conversation) im2
ON im2.id_conversation = im.id_conversation
AND im2.occured_at = im.occured_at
ORDER BY im.occured_at DESC
于 2013-10-16T12:07:28.313 に答える
-1

このクエリを作成しましたが、正常に動作するはずです。このクエリに関するコメントを受け取りたいです。

SELECT DISTINCT (
            im.id_conversation
            ), users.name, users.surname, users.username, image_upload.name_image, im.message as last_msg, im.occured_at, im.read_msg
            FROM inbox_join
            INNER JOIN (

            SELECT sub . * 
            FROM (

            SELECT DISTINCT (
            id_conversation
            ), id_user, message, occured_at, read_msg
            FROM inbox_msg
            WHERE id_user <> 1
            ORDER BY occured_at DESC
            ) AS sub
            GROUP BY sub.id_user
            ORDER BY sub.occured_at DESC
            ) AS im ON im.id_conversation = im.id_conversation
            INNER JOIN users ON im.id_user = users.id
            INNER JOIN image_upload ON users.profile_image = image_upload.id_image
            WHERE inbox_join.id_user = 1 || inbox_join.id_user_2 = 1
于 2013-10-16T11:45:00.357 に答える