Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列出当前与-PHP聊天的用户_Php_Mysql_Sql - Fatal编程技术网

列出当前与-PHP聊天的用户

列出当前与-PHP聊天的用户,php,mysql,sql,Php,Mysql,Sql,我必须创建一个页面,列出所有向我发送消息的用户或我正在发送消息的用户。所以,我也可以是信息的接收者和发送者。另外,消息应该是最新的。就像我们在whats应用程序中的列表页面一样。比如: User1 some latest message < ---------------------------- User2 some other latest message > ---------------------------- User3 some latest message

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

User1
some latest message       <
----------------------------
User2
some other latest message >
----------------------------
User3
some latest message       <
----------------------------
User4
some latest message       <
----------------------------
User5
some latest message       >
----------------------------
但此SQL将返回记录组,如:

在这里您可以看到,我有两个用户ID 1和2的组,但理想情况下,我应该只有一个用户ID组合1和2的记录。更重要的是,它们不是最新的信息。他们归还最老的一个。因此,它只是一个用户列表,其中包含交换、发送或接收的消息


任何人都可以让我知道我在SQL中缺少了什么来让它工作吗?非常感谢您的帮助。

很可能您应该在嵌套子查询中使用union,它不是现成的查询:

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

很难说这个问题是关于什么的,但我倾向于认为你想使用
而不是
-
,其中发送方id=1和接收方id=1
如果我不清楚,我就道歉,不,我不能使用,如果我使用和,它将不会返回任何值。我不能给我发信息。我只需要创建一个与我聊天的用户列表。这与我正在发送消息或正在接收消息无关。希望我现在明白了。这似乎会设置为只检索一个人发送给自己的消息。我只需要创建一个与我聊天的用户列表。这与我正在发送消息或正在接收消息无关。希望我现在明白了,你能在消息表上添加一个“having max(创建时间)”吗?假设你有一个这样的领域。这将过滤掉旧邮件,只返回您关心的最新邮件。谢谢,它解决了我的问题。非常感谢:)
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