mysql 如何统计用户与其他用户的聊天次数

dgenwo3n  于 2023-01-29  发布在  Mysql
关注(0)|答案(2)|浏览(227)

我尝试了一些mysql语句,但没有达到我的期望。

如何通过最低的总数得到to_user聊天和订单的总数?
假设在这种情况下,
ID7与2个用户聊天
ID6只与1个用户聊天。
因此最小值将是ID6。
有人能帮我写sql语句吗?
这是我预期的结果
| 计数|至_用户|
| - ------|- ------|
| 1个|七|
| 第二章|六个|

6kkfgxo0

6kkfgxo01#

我想你的问题可以用下面的代码来解决:

SELECT COUNT(DISTINCT(from_user)) AS total,to_user
FROM chats
GROUP BY to_user
ORDER BY total ASC
xoefb8l8

xoefb8l82#

请确保在两个方向上索引交叉点,否则它稍后将BYITA!

ALTER TABLE messages
    ADD INDEX idx_from_to (from_user, to_user),
    ADD INDEX idx_to_from (to_user, from_user);

您可能需要考虑这样一个事实,即给定用户的完整聊天列表是(from any user, to given user) UNION (to any user, from given user)
考虑示例数据中的用户1,他向用户5、6和7发送了消息,但未收到任何消息。用户5向用户7发送了消息,并从用户1收到了消息。

SELECT COUNT(DISTINCT(from_user)) AS count, to_user
FROM messages
GROUP BY to_user
ORDER BY count ASC

返回以下内容(与您的问题中详细说明的预期结果匹配,错误除外)
| 计数|至_用户|
| - ------|- ------|
| 1个|五个|
| 1个|六个|
| 第二章|七|
反之

SELECT COUNT(*) AS count, from_user AS user
FROM (
    SELECT from_user, to_user FROM messages
    UNION
    SELECT to_user, from_user FROM messages
) t
GROUP BY from_user
ORDER BY count ASC;

退货
| 计数|用户|
| - ------|- ------|
| 1个|六个|
| 第二章|五个|
| 第二章|七|
| 三个|1个|

相关问题