简体   繁体   English

MySQL查询将消息分组为对话

[英]MySQL Query to Group Messages as Conversation

I need to show messages as conversation in my user's inbox. 我需要在用户的收件箱中将消息显示为对话。 Grouped by sender and displaying the last message (either last message received from the sender or my latest reply to that sender). 由发件人分组并显示最后一条消息(从发件人收到的最后一封邮件或我对该发件人的最新回复)。

So far my current MySQL query only shows all received messages without any grouping. 到目前为止,我当前的MySQL查询仅显示所有收到的消息而没有任何分组。

Here's my database structure: 这是我的数据库结构:

+-----------------------------------------------------------------------------------+
|                                  users_messages                                   |
+-----------------------------------------------------------------------------------+
| message_ID | from_id | to_id | date | subject | body | unread | delete1 | delete2 |
+-----------------------------------------------------------------------------------+

+---------------------+
|        users        |
+---------------------+
| id | username | ... 
+----+----------+-----+

Here is my current query: 这是我目前的查询:

$result = $DB->query("SELECT p.*, p.sender as sender, m.*
FROM  " . DB_PREFIX . "messages p
LEFT JOIN " . DB_PREFIX . "members m ON p.sender=m.member_id
WHERE p.receiver='" . $SESSION->conf['member_id'] . "' AND delete2=0
ORDER BY p.senddate DESC
LIMIT " . (($page - 1) * $PREFS->conf['per_page']) . ", " . $PREFS->conf['per_page']);

Kind of messy - but should work for you: 有点乱 - 但应该适合你:

SELECT 
    * 
FROM 
    user_messages 
WHERE 
    message_ID IN ( 
    SELECT 
        MAX(message_ID) 
    FROM 
        (SELECT 
            IF(m.from_id = <THE USER ID>, m.to_id, m.from_id) as other_user_id, 
            m.message_id 
        FROM 
            users_messages m 
        WHERE 
            m.from_id = <THE USER ID> OR m.to_id = <THE USER ID>) me 
    GROUP BY 
        other_user_id 
    ) 
ORDER BY 
    message_id DESC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM