php - MySQL 获取两个用户之间的对话

标签 php mysql sql select

我有一个名为 private_messages 的 SQL 表,其中包含字段(id、from、to、message、stamp)。 戳字段对应消息的日期

那么我需要什么查询:

1) 获取两个用户之间的对话(按日期排序)?

我试过查询

(SELECT * FROM private_messages WHERE from=$my_id AND to=$other_id) 
UNION 
(SELECT * FROM private_messages WHERE from=$other_id AND to=$my_id) 
ORDER BY stamp
;

但不起作用...

2) 获取我和其他用户之间的最后一条消息,每个消息都有不同的用户,按日期排序(例如构建一个像 faceebook 一样的收件箱)?

最佳答案

1.)

SELECT  * 
FROM    private_messages a
WHERE   (a.from = $my_id AND a.to = $other_id) OR
        (a.from = $other_id AND a.to = $my_id)
ORDER   BY stamp DESC

2.)

SELECT  f.*
FROM
        (
            SELECT  *
            FROM    private_messages a
            WHERE  (LEAST(a.from, a.to), GREATEST(a.from, a.to), a.stamp) 
                    IN  (   
                            SELECT  LEAST(b.from, b.to) AS x, 
                                    GREATEST(b.from, b.to) AS y,
                                    MAX(b.stamp) AS msg_time
                            FROM    private_messages b
                            GROUP   BY x, y
                        )
        ) f
WHERE   $my_id IN (f.from, f.to)
ORDER   BY f.stamp DESC

关于php - MySQL 获取两个用户之间的对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14545143/

相关文章:

php - 错误:警告:mysqli_query()期望参数1为mysqli

sql - 在 SQL Server 中将月份名称转换为月份编号

php - get_status() 函数返回 1 而不是 true 或 false,为什么?

php - 如何使用枚举添加在下拉列表中选择的默认值?

php - 在 mysql 查询中提供无效查询

php - 如何使用PDO编辑最大查询大小?

php - 通过终端从 PHP 连接到 MYSQL

sql - 在多个表的 GROUP BY 之后获取 "latest"行

php - 为什么只返回数组的第一个元素?

MySQL表按月分区