高分请教一个和排序有关的问题

boyalfa 2004-11-24 02:35:35
ID ClassName(名称) Compositor(排序值)
------------------------------------------------------------
0001 书 1
------------------------------------------------------------
0001_0001 语文书 1
------------------------------------------------------------
0002 文具 2
------------------------------------------------------------
0002_0001 铅笔 1
------------------------------------------------------------
其中0001_0001是0001的下一级,0002_0001是0002的下一级,排序值则是同一级内的
排序,不同级的排序值之间没有任何关系。

我想实现的功能:
交换书和文具的排序值后,书的排序值变成2,文具的排序值变成1,同时
书的ID变成了0002,书的下一级语文书的ID变成了0002_0001;同样文具的ID就变成0001
文具的下一级变成0001_0001。这样就把排序值跟ID关联起来。

有人能看懂我的意思吗?如果有请指点一二,偶会高分报答的~
...全文
215 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
终于调试成功了,谢谢各位!
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
lienzhu(李强)
=======================
谢谢,我晚上回去再试试
lienzhu 2004-11-24
  • 打赏
  • 举报
回复
多次数据库和asp交换,最好是用存储过程!
lienzhu 2004-11-24
  • 打赏
  • 举报
回复
<%
function Exchage(conn,id1,Compositor1,id2,Compositor2)
len1=len(id1)
len2=len(id2)
conn.execute "update youtable set Compositor=" & Compositor2 & " where id='" & id1 &"'"
conn.execute "update youtable set Compositor=" & Compositor1 & " where id='" & id2 &"'"
conn.execute "update youtable set id=('*' + '" & id2 & "'+right(id,len(id)-" & len2 & ")) where left(id," & len1 & ")='" & id1 & "'"
conn.execute "update youtable set id=('" & id1 & "'+right(id,len(id)-" & len1 & ")) where left(id," & len2 & ")='" & id2 & "'"
conn.execute "update youtable set id=(right(id,len(id)-1)) where left(id,1)='*'"
end function

id1="0001"
Compositor1=1
id2="0002"
Compositor2=2
call Exchage(conn,id1,Compositor1,id2,Compositor2)
%>
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
我其实就是想做个能方便排序的无限级的数。现在很多例子都只是无限级,但不支持排序。
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
我只看到这里,就不想往下看你的问题了,因为这样的设计肯定是不合理的。采用树型结构,可以无限往下分子商品目录,是一个库存管理最基本要求。你先设计好这一关,再来谈排序问题,就很简单了。
========================================================================================
朋友你有例子吗?怎么样的设计才是最合理的呢?能否给个资料参考一下?
我的信箱是:boyalfa@126.com
谢谢
lienzhu 2004-11-24
  • 打赏
  • 举报
回复
0001转换成0002并且前面加*
update class set id=('*' + '0002'+right(id,len(id)-4)) where left(id,4)='0001'
0002转换成0001
update class set id=('0001'+right(id,len(id)-4)) where left(id,4)='0002'
去掉*
update class set id=(right(id,len(id)-1)) where left(id,1)='*'

你可以改成函数

lonaerd 2004-11-24
  • 打赏
  • 举报
回复
0001
0001_0001
0002
0002_0001

我只看到这里,就不想往下看你的问题了,因为这样的设计肯定是不合理的。采用树型结构,可以无限往下分子商品目录,是一个库存管理最基本要求。你先设计好这一关,再来谈排序问题,就很简单了。
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
顶顶顶
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
如果ID能和排序值关联,那我在读取整个数据库的时候,就可以用一个sql语句,order by ID,就可以把所有层次显示出来了。
因为读出来的都是
0001
0001_0001
0002
0002_0001
这样一个循环就可以把所有层次显示出来了。
蒋健华 2004-11-24
  • 打赏
  • 举报
回复
说说你具体为什么要这么设计,后来又为什么要这样的功能
yqh1314 2004-11-24
  • 打赏
  • 举报
回复
帮顶
lienzhu 2004-11-24
  • 打赏
  • 举报
回复
其实不麻烦,就三个sql语句,但必须熟悉sql数据库函数,left,right ...
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
是不是把ID互换一下。如把两只杯子里的水互换一下,是吧?借助第三只杯子!
======================================================================
修改了某一级后,这一级下面所有的子类都要随着更新。就这个麻烦,头也弄昏了~杯子太多了~

有简单易懂的办法就好了

boyalfa 2004-11-24
  • 打赏
  • 举报
回复
如果ID是关键字段,那我看楼主还是算了吧
=====================================
那可以另外再弄个自增的关键字段的
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
修改表结构
=======================
如何修改?怎么能把排序值跟编号关联起来?
如果能关联,那么在读取数据的时候,只要一个SQL语句,order by ID 就可以所有层次写出来。
蒋健华 2004-11-24
  • 打赏
  • 举报
回复
如果ID是关键字段,那我看楼主还是算了吧
cncca 2004-11-24
  • 打赏
  • 举报
回复
是不是把ID互换一下。如把两只杯子里的水互换一下,是吧?借助第三只杯子!
boyalfa 2004-11-24
  • 打赏
  • 举报
回复
直接对换可能不行,必须有跳板,因为ID是关键字段!

先吧0001-相关的都换成t0001-;然后吧0002-相关的换成0001-,最后把0001-相关的换乘0002-
这样实现对调,而不会发生关键字段重复冲突!
=============================================
好象是要这么弄,不然新的ID会和旧的ID混在一起
蒋健华 2004-11-24
  • 打赏
  • 举报
回复
起始他的算法用一个函数,函数接受排序值,内部双重循环就可以
加载更多回复(12)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧