免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5641 | 回复: 14
打印 上一主题 下一主题

求一SQL语句或存储过程解决我一难题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-15 15:44 |只看该作者 |倒序浏览
20可用积分
+-------+-----+-----------------+---------+------------+
| uid   | gid | gname           | gsortid | gversion   |
+-------+-----+-----------------+---------+------------+
| 100011 |   1 | 我的好友        |       0 |          0 |
| 100011 |   2  | 总部              |       0 |          0 |
| 100011 |   3  |  合作商          |       0 |          0 |
| 100011 |   4  | 校友同学        |       0 |          0 |
| 100022 |   0  | 我的联系人     |       0 |          0 |
| 100022 |  20 | 朋友              |       0 |          0 |
| 100022 |  22 | 同事              |       0 |          0 |
| 10003   |   1  | 兄弟              |       0 |          0 |
| 10003   |   2  | 朋友              |       0 |          0 |
我想把uid相同的组将gsortid这个字段自增?这部分数据是旧数据,目前gsortid全部都为0.转换后达到下面这个效果!

+-------+-----+-----------------+---------+------------+
| uid   | gid | gname           | gsortid | gversion   |
+-------+-----+-----------------+---------+------------+
| 100011 |   1 | 我的好友         |       1 |          0 |
| 100011 |   2  | 总部              |       2 |          0 |
| 100011 |   3  |  合作商          |       3 |          0 |
| 100011 |   4  | 校友同学        |       4 |          0 |
| 100022 |   0  | 我的联系人     |       1 |          0 |
| 100022 |  20 | 朋友              |       2 |          0 |
| 100022 |  22 | 同事              |       3 |          0 |
| 10003   |   1  | 兄弟              |       1 |          0 |
| 10003   |   2  | 朋友              |       2 |          0 |

最佳答案

查看完整内容

随便写了个。。。

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
2 [报告]
发表于 2009-07-15 15:44 |只看该作者
随便写了个。。。
drop PROCEDURE if EXISTS test ;

CREATE PROCEDURE test()
BEGIN

DECLARE done,done2 INT DEFAULT 0;
DECLARE a CHAR(36);
DECLARE c INT DEFAULT 0;
DECLARE b INT DEFAULT 0;
DECLARE cursor_name CURSOR FOR  select DISTINCT(`uid`)  from  leoxqing ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

open   cursor_name;
REPEAT  
FETCH cursor_name INTO a;
if not done then     

    BEGIN
    DECLARE cursor_name2 CURSOR FOR  select gid   from  leoxqing  where uid=a;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done2 = 1;
   
   
    open   cursor_name2;
    set b=0;
    repeat
   
    FETCH cursor_name2 INTO c;
    set  b=b + 1;
   
     if not done2 then
    update leoxqing  set gversion=b where uid=a and gid=c;
    end if;
   
    until done2 end repeat;
    close cursor_name2;
    set done2=0;
    end;
     
end if;
UNTIL done END REPEAT;
close cursor_name;
END

11111.jpg (63.86 KB, 下载次数: 74)

11111.jpg

论坛徽章:
0
3 [报告]
发表于 2009-07-15 16:45 |只看该作者
把你这个表和数据,存储成sql文件发上来。用存储过程帮你搞定。。

论坛徽章:
0
4 [报告]
发表于 2009-07-15 16:48 |只看该作者
原帖由 leoxqing 于 2009-7-15 15:44 发表
+-------+-----+-----------------+---------+------------+
| uid   | gid | gname           | gsortid | gversion   |
+-------+-----+-----------------+---------+------------+
| 100011 |   1 | 我的 ...


看表的结构uid+gid应该是唯一的。
用存储过程应该可以的。使用嵌套游标。
伪代码:

定义游标1 select distinct(uid) from table_name;
打开游标1
     将值赋给变量XX
     定义游标2 select gid from table_name where uid=XX order by gid;
          声明变量YY 初始值为1
           打开游标2
                 将值赋给变量ZZ
                 update table_name set gsortid=YY where uid=XX and gid=ZZ;
                 YY++;
           循环结束关闭游标2
循环结束关闭游标1

不敢说肯定好用啊,有时间试一下看行不。

评分

参与人数 1可用积分 +10 收起 理由
枫影谁用了 + 10 精品文章

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2009-07-15 16:51 |只看该作者
原帖由 乱.码 于 2009-7-15 16:48 发表


看表的结构uid+gid应该是唯一的。
用存储过程应该可以的。使用嵌套游标。
伪代码:

定义游标1 select distinct(uid) from table_name;
打开游标1
     将值赋给变量XX
     定义游标2 select gid f ...

基本上对的。。看来基础不错啊

论坛徽章:
0
6 [报告]
发表于 2009-07-15 17:12 |只看该作者
原帖由 醒目 于 2009-7-15 16:51 发表

基本上对的。。看来基础不错啊

论坛徽章:
0
7 [报告]
发表于 2009-07-15 20:41 |只看该作者
原帖由 醒目 于 2009-7-15 16:45 发表
把你这个表和数据,存储成sql文件发上来。用存储过程帮你搞定。。

传了部分数据上来了!

group.rar

908 Bytes, 下载次数: 83

论坛徽章:
0
8 [报告]
发表于 2009-07-15 22:16 |只看该作者
mysql实现row_number

论坛徽章:
0
9 [报告]
发表于 2009-07-16 09:41 |只看该作者
枫影的存储过程学得很快啊

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
10 [报告]
发表于 2009-07-16 09:46 |只看该作者
原帖由 voxxu 于 2009-7-16 09:41 发表
枫影的存储过程学得很快啊


这玩意,都基本上上通用的啊。。
多点东东练手就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP