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