› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
b7898585
V2EX  ›  MySQL

求教个 mysql 的语句

  •  
  •   b7898585 · Jun 2, 2016 · 2823 views
    This topic created in 3766 days ago, the information mentioned may be changed or developed.
    现在表 A 中有 3 个字段, ID, BOOKID, ORDERID
    ID 是自动编号的, BOOKID 是小说明, ORDERID 是小说章节排序的
    想要 在相同的 BOOKID 下,根据 ID 的大小,自动的重新赋值 ORDERID ,从 1 开始
    谁写过这样的 mysql 语句?
    1 replies  •  2016-06-09 13:30:47 +08:00
    fangjinmin
        1
    fangjinmin  
       Jun 9, 2016
    可以做一个 procedure 来做这个事情。


    ====================================================================
    DELIMITER;;

    DROP PROCEDURE IF EXISTS `update_a_orderid`;
    CREATE PROCEDURE update_a_orderid ()
    BEGIN
    DECLARE a_id, a_bookid, a_orderid, prev_bookid INT UNSIGNED;
    DECLARE done INT DEFAULT FALSE;
    DECLARE cur1 CURSOR FOR (SELECT ID, BOOKID from A ORDER BY BOOKID);
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    SET a_orderid=1;
    SET prev_bookid=0;
    OPEN cur1;
    read_loop: LOOP
    FETCH cur1 INTO a_id, a_bookid;
    IF done THEN
    LEAVE read_loop;
    END IF;
    IF prev_bookid = 0 OR a_bookid > prev_bookid THEN
    SET a_orderid = 1;
    ELSE
    SET a_orderid = a_orderid + 1;
    END IF;
    UPDATE A set orderid=a_orderid where id=a_id;
    END LOOP;

    CLOSE cur1;
    END
    ;;

    DELIMITER ;

    ====================================================================

    最后调用 call update_a_orderid();就可以了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2609 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:16 · PVG 23:16 · LAX 08:16 · JFK 11:16
    ♥ Do have faith in what you're doing.