php - 选择最后一对不同的

标签 php mysql

好的,我们有收件箱表,用于保存用户相互发送的消息。这是表格:

CREATE TABLE IF NOT EXISTS `inbox` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`fromid` int(10) unsigned NOT NULL DEFAULT '0',
`toid` int(10) DEFAULT NULL,
`message` text CHARACTER SET utf8 NOT NULL,
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `toid` (`toid`),
KEY `fromid` (`fromid`),
KEY `fromid_2` (`fromid`,`toid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1  ;

fromid 和 toid 是用户的 ID。我们有他们的 ID、发送消息的时间。我们需要的是一个查询,该查询将返回“我们的用户”(管理员)未回复的所有消息。 表帐户跟踪用户。简化一下:

CREATE TABLE IF NOT EXISTS `accounts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`our` int(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

所以基本上,我们需要一个查询,为我们提供管理员(我们的用户)未回复消息的用户、他们的计数以及他们发送给 ADMIN 的最后一条消息的日期,按从最后到最旧的顺序排列。

到目前为止,我们只有一些基本的查询,我们没有提出任何可以发布的合理内容。

提前致谢。

编辑:据我所知,我们首先需要在收件箱表中找到两个不同用户的最后一次交互...然后仅检查和过滤那些发送给我们用户的交互

最佳答案

这个怎么样?

SELECT i.* FROM inbox as i 
WHERE (i.toid, i.fromid) NOT IN 
(SELECT i2.fromid, i2.toid FROM inbox as i2 WHERE i2.`time` >= i1.`time` AND i2.id = 1);

使用join的另一种方式:

SELECT DISTINCT i1.* 
FROM inbox as i1 LEFT JOIN inbox as i2 
    ON  i1.toid = 1 AND 
        i1.fromid = i2.toid AND 
        i1.toid = i2.fromid AND 
        i1.`time` <= i2.`time`
WHERE i2.id IS NULL;

关于php - 选择最后一对不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36304752/

相关文章:

PHP:mysqli_query 不起作用

php - 在 laravel 中创建文件夹

mysql - BIG 查询 VS 本地查询和搜索 VS 对数据库的多个查询

mysql - 如何使用 SQL join 从闭包表中提取子 ID 和名称

php 登录无法使用有密码

php - 使用 simpleXML 编辑 XML

php - 时间戳列中的每日帖子计数

mysql - MySQL 中具有 TEXT 数据类型的表未复制到 Oracle

php - 正则表达式只允许字符串中的整数和逗号

mysql - 如何获取mysql数据库的大小?