代码之家  ›  专栏  ›  技术社区  ›  J. Doe

MySQL更新带有While和If语句的表条目循环问题

  •  0
  • J. Doe  · 技术社区  · 8 年前

    我有一个带有属性teamId和roundId的表,还有一个名为teamRoundId的表来连接这两个属性。我的目标是用一个名为teamRoundId的属性替换teamId/roundId连接

    enter image description here

    目前,teamRoundId属性中填充了一些数字,因为我正在尝试将其正确。

    我认为最接近我的说法是:

    drop procedure if exists j;
    delimiter $$
    CREATE PROCEDURE j()
    BEGIN 
    DECLARE v INT DEFAULT 1;
    DECLARE c INT DEFAULT 0;
    DECLARE d INT DEFAULT 1;
    
     WHILE v < 64 DO
        UPDATE `ssshortagerule`
        SET `teamRoundId` = v
        Where teamId = d AND roundId = c;
        IF c < 6 THEN
        SET c = c + 1;
        ELSE
        SET c = 0 AND d = d + 1;
        END IF;
        SET v = v + 1;
    END WHILE;
    END $$
    delimiter ;
    call j();
    

    所以teamId 1和roundId 0应该是teamRoundID 1, teamId 1,roundId 1->teamRoundId 2等,直到63。 我的陈述遗漏了什么?

    也就是说,teamRoundId 59到63是由上述声明生成的。2是手动添加的。

    其他信息:共有7(0至6)轮和9支球队,但并非所有球队都有此表中的条目

    1 回复  |  直到 8 年前
        1
  •  0
  •   J. Doe    8 年前

    使用SET命令时,两个变量之间不能有AND语句:

    drop procedure if exists j;
    delimiter $$
    CREATE PROCEDURE j()
    BEGIN 
    DECLARE v INT DEFAULT 1;
    DECLARE c INT DEFAULT 0;
    DECLARE d INT DEFAULT 1;
    
     WHILE v < 64 DO
        UPDATE `ssshortagerule`
        SET `teamRoundId` = v
        Where teamId = d AND roundId = c;
        IF c < 6 THEN
        SET c = c + 1;
        ELSE
        SET c = 0;
        SET d = d + 1;
        END IF;
        SET v = v + 1;
    END WHILE;
    END $$
    delimiter ;
    call j();