表排序问题。
现有表(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
... ...
求指点迷津!! 给你存储过程,按照你的需求,你稍微加工下,基本就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 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]