求教个 mysql 的语句

2016-06-02 23:24:22 +08:00
 b7898585
现在表 A 中有 3 个字段, ID, BOOKID, ORDERID
ID 是自动编号的, BOOKID 是小说明, ORDERID 是小说章节排序的
想要 在相同的 BOOKID 下,根据 ID 的大小,自动的重新赋值 ORDERID ,从 1 开始
谁写过这样的 mysql 语句?
1777 次点击
所在节点    MySQL
1 条回复
fangjinmin
2016-06-09 13:30:47 +08:00
可以做一个 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();就可以了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/283113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX