Php MySQL中的迁移脚本

Php MySQL中的迁移脚本,php,mysql,Php,Mysql,我想将数据从一个表迁移到另一个表 出于我的目的,我编写了一个简单的PHP脚本,但我想通过使用用户定义变量的MySql脚本来实现这一点: PHP脚本如下所示: //MIGRATION $sql = "SELECT position FROM ts_user_config WHERE position != '' AND position NOT REGEXP '^-?[0-9]+$' GROUP BY TRIM(position) ORDER BY position"; $position

我想将数据从一个表迁移到另一个表

出于我的目的,我编写了一个简单的PHP脚本,但我想通过使用用户定义变量的MySql脚本来实现这一点:

PHP脚本如下所示:

    //MIGRATION
$sql = "SELECT position FROM ts_user_config WHERE position != '' AND position NOT REGEXP '^-?[0-9]+$' GROUP BY TRIM(position) ORDER BY position";
$positions = db_loadColumn( $sql );

foreach ($positions as $key => $pos) {
    $sql = "SELECT id FROM user_positions where UPPER(position) = UPPER('$pos')";
    $posId = db_loadResult($sql);

    if ($posId == null) {
        $sql = "INSERT INTO user_positions (position, `desc`) VALUES ('$pos', '$pos')";
        db_exec($sql);
        $posId = db_insert_id();
    }

    $sql = "UPDATE ts_user_config SET position='$posId' WHERE TRIM(position)='$pos'";
    db_exec($sql);
}
//---------
有人能这么好,把这个PHP指令重写成MySQL脚本吗?我试着这么做,但我的mySQL知识非常低,我无法做到这一点

如果不太费力的话,请帮助我

提前谢谢你。

我已经做了!!!!!!!:) 这是我的mySQL脚本,我不知道它是否完美,但它可以满足我的需要。请告诉我我能不能在这里做点更好的。再次感谢:)

drop procedure if exists PositionMigration;
delimiter '//'
CREATE PROCEDURE PositionMigration()
    BEGIN
        BLOCK1: BEGIN
            DECLARE done INT DEFAULT FALSE;
            DECLARE pos VARCHAR(100);
            DECLARE posId1 INT;
            DECLARE posId2 INT;
            DECLARE sql1 CURSOR FOR SELECT position FROM ts_user_config WHERE position != '' AND position NOT REGEXP '^-?[0-9]+$' GROUP BY TRIM(position) ORDER BY position;
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
            OPEN sql1;

            read_loop: LOOP
                FETCH sql1 INTO pos;
                IF done THEN
                    LEAVE read_loop;
                END IF;

                BLOCK2: BEGIN
                    DECLARE posNotFound INT DEFAULT FALSE;
                    DECLARE sql2 CURSOR FOR SELECT id FROM user_positions where UPPER(position) = UPPER(pos);
                    DECLARE CONTINUE HANDLER FOR NOT FOUND SET posNotFound = TRUE; 
                    OPEN sql2;
                    FETCH sql2 INTO posId1;

                    IF posNotFound THEN
                        INSERT INTO user_positions (position, \`desc\`) VALUES (pos, pos);

                        BLOCK3: BEGIN
                            DECLARE sql3 CURSOR FOR SELECT LAST_INSERT_ID();
                            OPEN sql3;
                            FETCH sql3 INTO posId2;
                            UPDATE ts_user_config SET position=posId2 WHERE TRIM(position)=pos;
                            CLOSE sql3;
                        END BLOCK3;
                    ELSE
                        UPDATE ts_user_config SET position=posId1 WHERE TRIM(position)=pos;
                    END IF;
                    CLOSE sql2;
                END BLOCK2;
            END LOOP;
            CLOSE sql1;
        END BLOCK1;
END;
//
delimiter ';'
call PositionMigration();