我正在编写一个 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/