mysql - 多自动增量
问题描述
我需要帮助,我需要在选择中自动递增行,除了我必须用 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 +
++++++++++++++++++++++++++++++
解决方案
这是一种利用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
推荐阅读
- javascript - 如何使用 jquery ajax 存储数据?
- oracle - 如何在 Oracle 中将 Varchar2 转换为时间?
- angular - 最初输入字段不是强制性的,但仍然禁用提交按钮?
- database - 存储 UpdatedAt 或 ExpireAt 时间戳以通过超时限制更新是正确的
- python - 在 Python 中仅删除某些特殊字符
- php - Phinx 表已经存在?想增加 1 个额外的桌子
- r - ggraph边缘连接错误?
- java - Netbeans 将一个 JButton 放在另一个前面
- mysql - MySQL innodb_buffer_pool_chunk_size 设置为 128M 不更新
- excel - 4个不同列的vba for循环