business124 发表于 2012-5-8 17:22:09

表排序问题。

现有表(rank字段暂时为空)
ID    count      rank
1      6   
2      3
3      7
4      5
...      ...

怎样根据 count 字段的大小用排序并用数字表示(最大为1,依次往后)insert into 到表的rank 字段?即有这样的效果:
ID    count      rank
1      6             2
2      3             4
3      7             1
4      5             3
...      ...
求指点迷津!!

hm3030 发表于 2012-5-10 10:08:42

给你存储过程,按照你的需求,你稍微加工下,基本就OK了
DELIMITER $$

USE `test`$$

DROP PROCEDURE IF EXISTS `test_1`$$

CREATE DEFINER=`admin`@`%` PROCEDURE `test_1`()
BEGIN
        DECLARE v_id        INT;
        DECLARE v_Max        INT;
        DECLARE v_Min        INT;
        DECLARE v_flag         INT;
        DECLARE v_count INT;
        SELECT COUNT(id) INTO v_count FROM test123;
        SELECT MAX(COUNT),MIN(COUNT) INTO v_Max,v_Min FROM test123;
        SET v_flag=1;
       
        WHILE v_Max >= v_Min DO
                SELECT id INTO v_id FROM test123 WHERE COUNT=v_Max;
                IF FOUND_ROWS() >=1 THEN
                        UPDATE test123 SET rank=v_flag WHERE id=v_id;
                        SET v_flag=v_flag+1;
                END IF;
                SET v_Max = v_Max - 1;
                SELECT v_id;
        END WHILE;
END$$

DELIMITER ;

business124 发表于 2012-5-10 15:27:09

本帖最后由 business124 于 2012-5-10 17:17 编辑

忘记密码了...貌似论坛前几天升级了啊:dizzy:
已解决!与2楼大同小异,代码如下:declare Pcount int;-- 记录当前最大count值
declare Incre int;-- 记录update影响语句
set Prank=1;-- 排序值

while exists(select * from table1 where rank=null) do
   select max(count) intoPcount from table1 where rank=null;
   
   set @sql=concat("update table1 set rank=",Prank," where count=",Pcount,";");
   prepare rank from @sql;
   execute rank;
   
   select row_count() into Icre;-- 统计update影响语句
   
   set Prank=Prank+Icre;
end while;
页: [1]
查看完整版本: 表排序问题。