首页 > 解决方案 > 多自动增量

问题描述

我需要帮助,我需要在选择中自动递增行,除了我必须用 id 的每个新值重新开始递增。我已经尝试使用 (@cnt: = @cnt + 1 ) 或 COUNT (*)这很重要,但我从来没有达到我想要的结果

我每次都得到

++++++++++++++++++++++++++++++
+ increment |   id  +  value +
++++++++++++++++++++++++++++++
+     1     |  1    |  foo   +
+     2     |  1    |  bar   +
+     3     |  2    |  foo   +
+     4     |  3    |  bar   +
+     5     |  3    |  foo   +
++++++++++++++++++++++++++++++

虽然我愿意

++++++++++++++++++++++++++++++
+ increment |   id  +  value +
++++++++++++++++++++++++++++++
+     1     |   1   |  foo   +
+     2     |   1   |  bar   +
+     1     |   2   |  foo   +
+     1     |   3   |  bar   +
+     2     |   3   |  foo   +
++++++++++++++++++++++++++++++

标签: mysqlsqldatabase

解决方案


这是一种利用https://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/记录的方法的方法。它利用变量并避免任何延迟评估问题,因为“MySQL 不会评估包含用户变量的表达式,直到它们被发送到客户端”。它使用使用函数的方法来强制立即评估变量。

这是我在 sqlfiddle.com 上用来试用的:

表以及值的创建和插入。

CREATE TABLE Table1
(`Id` int, `value` varchar(3))
;

INSERT INTO Table1
(`Id`, `value`)
VALUES
(1, 'foo'),
(1, 'bar'),
(2, 'foo'),
(3, 'bar'),
(3, 'foo')
; 

以及 MySQL 的 sql 查询

set @increment := 0, @id := '';

select @increment,  id, value
from Table1
where 0 <= greatest(
@increment := if(@id = id, @increment + 1, 1),
least(0, @id := id));

结果如下:

@increment  id  value
1   1   foo
2   1   bar
1   2   foo
1   3   bar
2   3   foo

推荐阅读