gpt4 book ai didi

php - 重新发布 : Query messages theard list

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

好吧,我再次发布同样的问题,但这次使用可能有效的替代解决方案。

我有包含以下字段的消息表。

1) id(pk),from_id(fk),to_id(fk),date_entered,消息

我的要求如下。

我需要向登录用户显示与其他用户的最后一条消息。例如

“mahendra”是一个登录用户,与“john”有 5 条消息,与“smith”有 3 条消息。

在这 5 条和 3 条消息中,登录用户 (mahendra) 可以是发送者 (from_id) 或接收者 (to_id)

我需要向每个用户显示与登录用户的最后一次通信。像这样

1) mahendra-john - 这是 mahendra 和 john 之间的最后一条消息2) mahendra-smith - 这是 mahendra 和 smith 之间的最后一条消息

在我的上一篇文章中,我无法通过查询来实现这一点。所以这就是我所做的。

$result=mysql_query("SELECT * FROM messages WHERE from_id=$_SESSION['userid'] OR to_id=$_SESSION['userid'] ORDER BY date_entered DESC");

现在我有登录用户是发送者或接收者的所有记录。

现在我需要过滤其他用户(john 和 smith)和 mahendra 中的最后一条消息并将其放入其他数组;

知道怎么做吗?

最佳答案

SELECT  b.Name Fromname,
c.name ToName,
a.date_entered,
a.Message
FROM
(
SELECT *
FROM Messages
where (LEAST(from_id, to_id), GREATEST(from_id, to_id), date_entered) IN
(
SELECT LEAST(from_id, to_id) as fromID,
GREATEST(from_id, to_id) as toID,
MAX(date_entered) as date_entered
FROM Messages
GROUP BY fromID, toID
)
) a
INNER JOIN UserList b
ON a.from_id = b.ID
INNER JOIN UserList c
ON a.to_ID = c.ID
WHERE 'Mahendra' IN (b.name, c.Name)

简要说明

让我们分解完整的查询。查询的核心是这样的,

SELECT  *
FROM Messages
where (LEAST(from_id, to_id), GREATEST(from_id, to_id), date_entered) IN
(
SELECT LEAST(from_id, to_id) as fromID,
GREATEST(from_id, to_id) as toID,
MAX(date_entered) as date_entered
FROM Messages
GROUP BY fromID, toID
)

查询的作用是借助 LEAST()GREATEST()< 从 Messages 表中获取每个用户的最新对话 MySQL 中的函数。在表 UserList(包含用户名列表)上加入子查询两次的原因是因为有两列:from_idto_id依赖于此表。

关于php - 重新发布 : Query messages theard list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15739154/

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