php - 重新发布 : Query messages theard list

标签 php mysql sugarcrm

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

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

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/

相关文章:

php - 在 redis 中缓存唯一的电子邮件

java - 从 mysql 查询结果中删除\n

sql - 从单列 MySQL 中的所有行中剥离 0

java - Hibernate 多对多关系

php - 为什么函数回显一个结果?

php - 对 mysqldump 使用 gzip 压缩

php - Windows 服务器上的 OCI8 php 扩展安装

php - 在 SugarCRM CE 中编辑潜在客户转换页面

mysql - SugarCRM 7 SugarQuery() 连接语句与自定义模块

php - 命令不同步;您现在无法使用 mysql 存储过程在 SugarCRM 中运行此命令