MySQL使用递增变量更新字段

Upe*_*sha 17 mysql mysqli

我的一个数据库中有一个名为'textile_events'的表.

mysql> describe textile_events;

+-------------+--------------+-----+---------+----------------+
| Field       | Type         | Key | Default | Extra          |
+-------------+--------------+-----+---------+----------------+
| id          | int(11)      | PRI | NULL    | auto_increment |
| token       | varchar(20)  |     | NULL    |                |
| reg_time    | datetime     |     | NULL    |                |
| eid         | varchar(20)  |     | NULL    |                |
| fname       | varchar(20)  |     | NULL    |                |
| lname       | varchar(20)  |     | NULL    |                |
| paid        | varchar(10)  |     | NULL    |                |
| seq_no      | int(11)      |     | NULL    |                |
+-------------+--------------+-----+---------+----------------+
8 rows in set (0.00 sec)

mysql> select count(*) from textile_events;

+----------+
| count(*) |
+----------+
|     9325 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from textile_events where eid = 'headsup' ;

+----------+
| count(*) |
+----------+
|     2553 |
+----------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

'seq_no'字段昨天被引入上表.

现在,我需要为所有'抬头'事件为'seq_no'字段分配一个递增数字,其中付费字段等于'付费'.

换句话说,我正在寻找这样的东西,

$i = 250
while( true ):
    $i++
    UPDATE textile_events SET 'seq_no' = $i 
        WHERE eid = 'headsup' AND paid = 'paid'
endwhile;
Run Code Online (Sandbox Code Playgroud)

如何为新引入的字段分配递增数字,仅用于满足给定条件的recods?

有哪些可用选项以及实现此目的的最有效方法是什么?

pet*_*erm 47

你在找这样的东西吗?

UPDATE textile_events e,
       (SELECT @n := 249) m
   SET e.seq_no = @n := @n + 1 
    WHERE e.eid = 'headsup' AND e.paid = 'paid'
Run Code Online (Sandbox Code Playgroud)

SQLFiddle

  • @kabadisha只需使用`CONCAT()`就像这样`... SET e.seq_no = CONCAT('foo',@ n:= @n + 1)...` (2认同)

Dev*_*per 10

简单的查询就是,只需将变量设置为您想要的某个数字.然后通过从该数字递增1来更新所需的列.

Ex :: Query更新列为空的所有行.它将通过递增1来更新每个行ID

    SET @a  = 50000835 ;  
    UPDATE `civicrm_contact` SET external_identifier = @a:=@a+1 
    WHERE external_identifier IS NULL;
Run Code Online (Sandbox Code Playgroud)

希望这对某人有所帮助.:)