PHPMyAdmin - 使用循环数字序列

时间:2018-02-18 01:48:36

标签: mysql phpmyadmin

我希望我能正确地解释这个...但我正在尝试更新一个包含重复序列的30k行的表中的列。

我之前用随机数填充了整个列:

UPDATE位置SET template = CAST((RAND()* 4)+1 AS UNSIGNED);

给出了:

  • 2
  • 4
  • 5
  • 1
  • 3

等。在整个30k行中以随机的方式......

我想输入一个可以生成重复序列的查询,如:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

跨所有30k行。

我一直在研究循环和自动增量,但无法使其工作。

任何帮助非常感谢:)

2 个答案:

答案 0 :(得分:0)

也许使用变量会做例如

DROP TABLE IF EXISTS T;
CREATE TABLE T(ID INT, SEQNO INT);

INSERT INTO T VALUES (1,NULL),(2,NULL),(3,NULL),(4,NULL),(5,NULL),(6,NULL),(7,NULL);

UPDATE  T
SET SEQNO = (SELECT IF(@RN = 2 ,@RN:=1,@RN:=@RN + 1) FROM (SELECT @RN:=0) R)
WHERE 1 = 1

+------+-------+
| ID   | SEQNO |
+------+-------+
|    1 |     1 |
|    2 |     2 |
|    3 |     1 |
|    4 |     2 |
|    5 |     1 |
|    6 |     2 |
|    7 |     1 |
+------+-------+

答案 1 :(得分:0)

感谢您的建议......我很难找到答案,但最终找到了一些可以完全按照我的目的去做的事情。我必须承认,这远远超出了我的能力,但现在是:



SET @row_number = 0;
SET @max_num = 75;
update locations loc1
join (
    select 
        if ((num % @max_num) = 0, @max_num, (num % @max_num)) as num2,
        a.*    
    from (
        select 
        (@row_number:=@row_number + 1) AS num,
        loc.* 
        from locations loc  
        ORDER BY num
    ) a
    order by num, num2
) loc2 on (loc2.id = loc1.id)
set loc1.colname = loc2.num2;