我有表格 Pages
+--------------------------------+
| Pages |
+--------------------------------+
| Name | Id | ParentId | Ordinal |
|--------------------------------|
| A | 1 | NULL | 0 |
|--------------------------------|
| B | 2 | 1 | 0 |
|--------------------------------|
| C | 3 | 1 | 0 |
|--------------------------------|
| D | 4 | 1 | 0 |
|--------------------------------|
| E | 5 | 2 | 0 |
|--------------------------------|
| F | 6 | 2 | 0 |
|--------------------------------|
| G | 7 | 3 | 0 |
|--------------------------------|
| H | 8 | 3 | 0 |
|--------------------------------|
| I | 9 | 3 | 0 |
+--------------------------------+
我想用 SQL 更新表,所以我得到了
+--------------------------------+
| Pages |
+--------------------------------+
| Name | Id | ParentId | Ordinal |
|--------------------------------|
| A | 1 | NULL | 0 |
|--------------------------------|
| B | 2 | 1 | 0 |
|--------------------------------|
| C | 3 | 1 | 1 |
|--------------------------------|
| D | 4 | 1 | 2 |
|--------------------------------|
| E | 5 | 2 | 0 |
|--------------------------------|
| F | 6 | 2 | 1 |
|--------------------------------|
| G | 7 | 3 | 0 |
|--------------------------------|
| H | 8 | 3 | 1 |
|--------------------------------|
| I | 9 | 3 | 2 |
+--------------------------------+
列 Ordinal
必须是增量值,从 0 开始。
它应该在每次 ParentId
列更改时重新开始。
最佳答案
一个简化的答案。
示例输出: 这是 SQLFiddle Demo
SELECT Name,Id,ParentId,Ordinal
FROM
(SELECT `Name`,
`Id`,
`ParentId`,
(@category_num :=IF(ParentId = @ParentId,@category_num+1,0)) AS Ordinal,
@ParentId:= `ParentId` AS Temp_swap
FROM Pages)T
希望这对您有所帮助。
关于mysql - 如何使用基于列的增量值更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826187/