列出当前正在聊天的用户 - PHP

时间:2014-09-15 18:10:22

标签: php mysql sql

我必须创建一个页面,我必须列出向我发送消息的所有用户或我发送消息的用户。所以,我也可以是消息的接收者和发送者。此外,消息应该是最新的消息。就像我们在什么应用程序中的列表页面一样。像:

User1
some latest message       <
----------------------------
User2
some other latest message >
----------------------------
User3
some latest message       <
----------------------------
User4
some latest message       <
----------------------------
User5
some latest message       >
----------------------------

我有一个用户表,其中包含每个用户的正常详细信息以及包含该消息的消息表。我想知道我可以只用一个查询来完成上面的列表吗?我试过这个问题:

$sql1 = "SELECT * FROM tbl_messages WHERE sender_id=1 OR receiver_id=1 GROUP BY sender_id, receiver_id ORDER BY message_timestamp DESC";

但是这个SQL返回记录组,如:

enter image description here

在这里你可以看到我有两个用户ID 1和2的组,但理想情况下我应该只有一个用户ID组合1和2的记录。而且它们不是最新的消息。他们返回最老的一个。因此,只需交换,发送或接收带有消息的用户列表。

任何人都可以让我知道我在SQL中缺少什么使它工作?任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

原则上你应该在嵌套子查询中使用联合,它不是out_of_the_box查询:

SELECT
    m.message,
    m.message_timestamp,
    IF(s.user_id = 1, r.user_name, s.user_name) talk_to,
    IF(s.user_id = 1, 'out', 'in') in_out
FROM
    (SELECT
        me,
        other,
        MAX(message_id) max_id
    FROM
        (SELECT
            sender_id me,
            receiver_id other,
            message_id
        FROM
           messages
        WHERE sender_id = 1
        UNION ALL
        SELECT
            receiver_id me,
            sender_id other,
            message_id
        FROM
            messages
        WHERE receiver_id = 1
    ) mu
    GROUP BY me,other
    ) lm
JOIN
    messages m
    ON lm.max_id = m.message_id
JOIN
    users s
    ON m.sender_id = s.user_id
JOIN
    users r
    ON m.sender_id = r.user_id