gpt4 book ai didi

php - 获取唯一用户 ID 以获取具有最新对话的用户列表

转载 作者:行者123 更新时间:2023-11-29 05:05:24 25 4
gpt4 key购买 nike

我想获取与我进行过最新对话的用户 ID。

我完全不知道如何开始:

我的消息表结构是这样的:

id | msg_from_uid | msg_to_uid | msg_text | msg_date
----------------------------------------------------
1 | 8 | 3 | hello | 2018-03-12 12:00:00
2 | 3 | 8 | hello | 2018-03-12 12:11:00
3 | 8 | 5 | hello | 2018-03-12 12:12:00
4 | 5 | 8 | hello | 2018-03-12 12:13:00
5 | 8 | 7 | hello | 2018-03-12 12:14:00
6 | 7 | 8 | hello | 2018-03-12 12:15:00

假设我的用户 ID 是 8 那么我怎样才能在最新的对话顺序中获得不同的 ID 3、5、7?

我只想要唯一的用户 ID。这样我就可以在我的左侧边栏面板中列出它们,以查看我最近与谁进行过对话。

我的预期输出:

只是最新对话日期顺序中的用户 ID:

user_id
----
7
5
3

如有任何帮助,我们将不胜感激。

最佳答案

一种选择是使用最小/最大技巧来查找每个对话的最新记录。这是在下面标记为 t2 的子查询中完成的。然后,我们可以将您的原始表连接到此子查询以获得完整记录。最后,为了获得您想要的交易对手 ID,我们可以选择匹配 8(来源)的用户 ID。

SELECT
CASE WHEN t1.msg_from_uid = 8
THEN t1.msg_to_uid
ELSE t1.msg_from_uid END AS uid
FROM yourTable t1
INNER JOIN
(
SELECT
LEAST(msg_from_uid, msg_to_uid) AS from_id,
GREATEST(msg_from_uid, msg_to_uid) AS to_id,
MAX(msg_date) AS max_msg_date
FROM yourTable
GROUP BY
LEAST(msg_from_uid, msg_to_uid),
GREATEST(msg_from_uid, msg_to_uid)
) t2
ON ((t1.msg_from_uid = t2.from_id AND t1.msg_to_uid = t2.to_id) OR
(t1.msg_from_uid = t2.to_id AND t1.msg_to_uid = t2.from_id)) AND
t1.msg_date = t2.max_msg_date
WHERE
t1.msg_from_uid = 8 OR t1.msg_to_uid = 8
ORDER BY
t1.msg_date DESC;

enter image description here

Demo

编辑:如果您想要与最新对话相对应的交易对手的用户 ID,则实际上可能不需要加入。但是我上面给出的查询将来可能对你有用,例如,如果你还想从每对用户之间的最新对话中获取文本。

关于php - 获取唯一用户 ID 以获取具有最新对话的用户列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49292681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com