mysql - 简短的 sql 挑战,结果集上有多个下一行,带有 group by 和 count

标签 mysql sql

我正在编写一个 wiki,并希望显示其他用户对用户输入所做的更改。

假设使用一个名为Input的表作为输入日志,简化为表(列):

输入(in_id、to_id、文本、us_id)

in_id是表Input的主键

to_id是表Topic的主键

文本是一些文本

us_id是User表的主键

以下示例...

+ - - - - - + - - - - -+ - - - - -+ - - - - -+
|  in_id    |  to_id   |  text    |  us_id   |      
+ - - - - - + - - - - -+ - - - - -+ - - - - -+
|     1     |    12    |   foo    |     1    |  
|     3     |    13    |   bar    |     1    |      
|     4     |    34    |   blub   |     5    |      
|     5     |    12    |   fo     |     5    |      
|     6     |    12    |   f      |     1    |      
|     7     |    13    |   b      |     6    |      
|     8     |    13    |   ba     |     1    |      
|     9     |    13    |   bar    |     7    |      
+ - - - - - + - - - - -+ - - - - -+ - - - - -+

…对于 us_id = 1 的用户应该会产生以下结果

+ - - - - - + - - - - -+ - - - - -+ - - - - -+
|  in_id    |  to_id   |  text    |  us_id   |      
+ - - - - - + - - - - -+ - - - - -+ - - - - -+
|     5     |    12    |   fo     |     5    |      
|     7     |    13    |   b      |     6    |
|     9     |    13    |   bar    |     7    |      
+ - - - - - + - - - - -+ - - - - -+ - - - - -+

我的查询思路:

我正在查找(结果集中的所有 to_id 和多个 to_id 且至少有一个 us_id = 1)中的每一下一行,其中 us_id != 1

各种sql语句都不起作用,因为我无法处理结果集的下一行。

下一行的 SQL 语句...

SELECT MIN(in_id) FROM Input WHERE in_id > (in_id out of the resultset)

...以及选择多次存在的 to_id...

GROUP BY in_id HAVING COUNT(in_id)>1

...不是问题。

应该怎样做?

最佳答案

假设 in_id 序列是递增的,并且“下一行”意味着 in_id 高于“上一行”,则以下查询将产生结果:

select input.*
from 
    (select min(in_id) as idmin, to_id  
            from input 
            where us_id=1 group by to_id
    ) mintable, 
    input 
where 
   (input.to_id = mintable.to_id and input.in_id > mintable.idmin) 
   and us_id <> 1;

内表将选择用户开始编辑的页面,第二个查询将选择此页面的所有后续更改。

关于mysql - 简短的 sql 挑战,结果集上有多个下一行,带有 group by 和 count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21657146/

相关文章:

mysql - 防止Slave复制删除

mysql - 使用数组删除Mysql记录

Mysql 日期格式

SQL查询2限制

sql - MySQL 多对多查询问题

MySQL ORM - 条件 WHERE 子句

SQL 总和

mysql - 如何将其归一化为 1NF/2NF?

php - 单一登录表单的数据库查询从两个注册表中提取数据

mysql - 如果在一个查询中选择行 == '0',如何插入?