我正在尝试与相关的最后一条消息进行对话,并按时间排序它们是否已阅读该消息。让我们去展示我的逻辑。
我创建了 3 个表:inbox_join / inbox_msg / users
在第一个表“收件箱加入”上,我有关于谁有积极讨论的数据。在这种情况下,我们有 id_user - "1" 和 id_user_2 - "4" 他们有一个对话。
在 inbox_msg 表中,我有文本消息、将显示消息的 id 对话以及其他易于理解的字段。
收件箱连接表
收件箱_msg 表
用户表
我做了一个可以正常工作的查询,但我的问题是我不能在 inbox_msg 表上找到发生的_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