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