mysql - 如何使用基于列的增量值更新记录

标签 mysql sql

我有表格 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 列更改时重新开始。

最佳答案

一个简化的答案。

示例输出:enter image description here 这是 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/

相关文章:

php - 试图合并两个嵌套查询以提高效率

sql - 是否可以加入表格和 View ?

sql - 如何删除 SQLite 中的所有空表?

mysql - 包含(Oracle)与匹配(MySql)

php - 网页链接管理 - php 与数据库

sql - mysql 左连接和求和分组依据

sql - 方法 'Boolean Contains(System.String)' 不支持转换为 SQL

mysql - 注册客户和访客结帐的数据库架构

sql - 数据库设计 : New Table versus New Columns

php - mysql连接和求和问题