CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  基础类

高分征求排序解决方案 :)

楼主c_unknower(c盲)2001-12-26 16:17:06 在 PowerBuilder / 基础类 提问

设有一下字段code  
  //////////////////////  
  C.1.3.1  
  C.1.2.1  
  C  
  C.1.1.1  
  C.1.1.3  
  C.1  
  C.6  
  C.8  
  C.2  
  C.1.3  
  C.2.2  
  C.3  
  C.2.2.1.1  
  C.4  
  C.2.2.1.3  
  C.2.4  
  C.2.6  
  C.2.7.1  
  C.2.8  
  C.2.10  
  C.4.1  
  C.4.3  
  C.4.5  
  C.4.7  
  C.4.9  
  C.4.12  
  C.5.1.1  
  C.5.1.2  
  C.5.2  
  C.5.4  
  C.6.2  
  C.6.4  
  C.6.6  
  C.7.2  
  C.7.4  
  C.7.6  
  C.7.8  
  C.8.1  
  C.8.3  
  C.11.1  
  C.11.3  
  C.5  
  C.7  
  C.9  
  C.1.1  
  C.1.1.2  
  C.1.1.4  
  C.1.2  
  C.2.1  
  C.2.2.1  
  C.2.2.1.2  
  C.2.2.2  
  C.2.3  
  C.2.5  
  C.2.7  
  C.2.7.2  
  C.2.9  
  C.2.10  
  C.4.2  
  C.4.4  
  C.4.6  
  C.4.8  
  C.4.11  
  C.5.1  
  C.5.1.3  
  C.5.3  
  C.6.1  
  C.6.3  
  C.6.5  
  C.7.1  
  C.7.3  
  C.7.5  
  C.7.7  
  C.7.9  
  C.8.2  
  C.11  
  C.11.2  
  C.11.1.1  
  /////////////////////  
   
   
   
   
  以字母开头,比如C  
  第一层  
  C.1  
  C.2  
  ...  
  C.9999...  
   
  C.1中分层  
  C.1.1  
  C.1.2  
  c.1.9999  
   
  每个节点下面都可以有无限个节点,规律同上  
  排序要求  
  C.1>C.2  
  C.11>C.2  
  c.1.11>C.12  
  C.1.2  
  如:  
  C.1  
  C.12  
  C.12.1  
  c.13  
  C.13.1  
  C.13.11  
  C.13.19  
  c.13.2  
  c.3  
  C.31...  
   
  问题点数:88、回复次数:11Top

1 楼bjwulin(开心)回复于 2001-12-26 16:32:43 得分 0

在数据库表中再增加一个字段控制层次(如001,001001,001001001,001002等)Top

2 楼c_unknower(c盲)回复于 2001-12-26 16:36:36 得分 0

我现在能基本做到正常排序  
  但  
  C.10会跑到C.9上门?:(Top

3 楼fjfzyufan(羽帆)回复于 2001-12-26 17:53:45 得分 0

考虑一下:C.01   这种格式。Top

4 楼newskysoft(阿乌)回复于 2001-12-26 18:07:28 得分 18

把c.9补0,即把所有的字段都补成特定的长度,如c.10     c.9应该这样:  
  c.000010  
  c.000009Top

5 楼c_unknower(c盲)回复于 2001-12-26 23:53:52 得分 0

这样的话那岂不是很麻烦?:(:(  
   
  而且   层数不固定  
   
  转换格式也会有困难:(Top

6 楼zjzzjzzjzzjz()回复于 2001-12-27 04:12:51 得分 0

注意,c.10与c.9当然是c.10在上面,注意是字符串比较啊!所以要达到你的效果,你可以在原有基础上稍微改动即可,即将字母部分与数字部分分开比较!  
  do   you   understand?Top

7 楼wangks777(_wskun)回复于 2001-12-27 08:57:17 得分 20

fjfzyufan(羽帆)用的方法还是比较实际的.  
  但如果后面跟的数字范围不大(<256)可以考虑作这样的一个映射:  
  "C.10.5.100"(10byte)   to   "C"+asc(10)+asc(5)+asc(100)(4byte)  
   
  这样既节省存储空间,便于比较排序,算法也不会复杂!  
  如果数字范围>256,可以考虑双字节扩展,不过映射过程复杂一些  
  Top

8 楼c_unknower(c盲)回复于 2001-12-28 09:09:11 得分 0

wangks777(_wskun)  
   
  能再详细点吗?  
  谢了:-)Top

9 楼pbdesigner(MIS/ERP开发)回复于 2001-12-28 18:51:01 得分 30

当层数不超过4时,同时具有如下格式:A.1.2.3(字符.数字.数字.数字),可按下列方法一排序.这种方法比较实用.  
  select   code  
      from   test  
    order   by   reverse(parsename(reverse(code),1)),  
                      convert(float,reverse(parsename(reverse(code),2))),  
                      convert(float,reverse(parsename(reverse(code),3))),  
                      convert(float,reverse(parsename(reverse(code),4)))  
  如果要求无限层数,我提供两中解决方法供参考.  
  方法二:增加一个栏位,在插入触发器中调用预先写好的用于规范数据的存储过程将数据转成规范后的数据,这个存储过程不难,用规范后的栏位排序.  
  方法三:建一个表存储code和format_code(规范后的数据),在插入触发器中调用预先写好的用于规范数据的存储过程将数据转成规范后的数据,这个存储过程不难.每次检索要排序时进行两表的连接,以后一个表的format_code栏位排序.  
  这两种方法都有缺点,方法一虽有局限性,但比较实用.  
   
   
   
  Top

10 楼wangks777(_wskun)回复于 2001-12-30 09:11:21 得分 20

你干脆这样吧,在表中增加一个栏位newfield,令其等于ChangeToNEW(oldfield)  
  这样在select时按新栏位排序就可以达到你的要求了  
  ChangeToNew这个函数用于实现  
  "C.10.5.100"   to   "C"+asc(10)+asc(5)+asc(100)这样的转变  
  要你自已编,不需要再说了吧。。。。。?(楼上的那们方法二说的是一个意思)Top

11 楼c_unknower(c盲)回复于 2001-12-30 09:43:23 得分 0

谢谢  
  加分了!!  
  Top

相关问题

  • 50分征求排序的算法
  • 征求排序算法,分不够可以加哦!
  • *********** 高分征求软件方案 *************
  • ********** 高分征求软件方案 *************
  • ********** 高分征求软件方案 ************
  • 高分征求系统规划方案!!!!
  • 高分征求解决方案
  • 高分征求一个方案!
  • 高分征求CRM详细的解决方案.
  • 高分征求.NET下自定义报表解决方案!!!

关键词

  • 排序
  • 字段
  • 存储过程
  • 数据
  • 数字
  • code
  • 栏位
  • parsename
  • reverse
  • 表

得分解答快速导航

  • 帖主:c_unknower
  • newskysoft
  • wangks777
  • pbdesigner
  • wangks777

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo