MySQL按时间顺序递增更新空列值

时间:2016-07-22 14:04:33

标签: php mysql

有一个包含数百个条目和六列的表格。其中一个列“事务”列已填充空值,我们现在需要该列具有唯一值,现有条目是唯一的。

有一个'time'日期时间列,理想情况下,'transaction'列将以'时间'顺序从1开始逐步更新。

这看起来很简单,但经过多次删除和恢复实时数据库后,它现在看起来不那么简单了,我们将非常感激一点帮助。

SQL Fiddle - Sample of live database

最终解决方案非常感谢Juan Carlos Oropeza提供解决方案并对我保持耐心。

UPDATE `my_table` t1 
INNER JOIN (SELECT t.*, 
               @rownum := @rownum + 1 AS `rank`
        FROM `my_table` t, 
             (SELECT @rownum := 0) r
        ORDER BY time
       ) t2
ON t1.`id` = t2.`id`
SET t1.`transaction` = t2.`rank` where t1.`transaction` is null

1 个答案:

答案 0 :(得分:2)

<强> SQL Fiddle Demo

UPDATE Table1 t1 
INNER JOIN (SELECT t.*, 
                   @rownum := @rownum + 1 AS `rank`
            FROM Table1 t, 
                 (SELECT @rownum := 0) r
            // ORDER BY time   use your datetime field
           ) t2
    ON t1.`ID` = t2.`ID`    // You need a PK field
SET t1.`value` = t2.`rank`  // Update your sequence field

<强>模式

CREATE TABLE Table1
    (`ID` int, `value` int)
;

INSERT INTO Table1
    (`ID`, `value`)
VALUES
    (10, NULL),
    (20, NULL),
    (30, NULL)
;

<强>输出

| ID | value |
|----|-------|
| 10 |     1 |
| 20 |     2 |
| 30 |     3 |

编辑:

或者只是创建一个新的ID字段为PK

DEMO

alter table `wp_user_txs` add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;