MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 3086|回复: 2
打印 上一主题 下一主题

[SQL类] 表排序问题。

[复制链接]
跳转到指定楼层
1#
发表于 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
...        ...
求指点迷津!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
2#
发表于 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 ;

点评

强!  发表于 2012-5-10 11:43

评分

1

查看全部评分

3#
 楼主| 发表于 2012-5-10 15:27:09 | 只看该作者
本帖最后由 business124 于 2012-5-10 17:17 编辑

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

  4. while exists(select * from table1 where rank=null) do
  5.    select max(count) into  Pcount from table1 where rank=null;
  6.    
  7.    set @sql=concat("update table1 set rank=",Prank," where count=",Pcount,";");
  8.    prepare rank from @sql;
  9.    execute rank;
  10.    
  11.    select row_count() into Icre;-- 统计update影响语句
  12.      
  13.    set Prank=Prank+Icre;
  14. end while;
复制代码

点评

恩,升级了下  发表于 2012-5-11 09:47
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-3 12:04 , Processed in 0.066081 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表