(急)请教:这种情况下sql语句或者程序该怎么写??

lionz1023 2009-12-23 09:51:05
表 cataid(新闻类别表)

字段: id name rootid rootname level

数据: 1 1级分类 1 1级分类 1

2 2级分类 1,2 1级分类,2级分类 2

3 3级分类 1,2,3 1级分类,2级分类,3级分类 3

上面是我做的多级分类表,现在修改的时候有一个问题:

参数: myid myname (可以增加)

比如我想修改id=1的类别中类别名称 “1级分类”为“1级分类1”,相应的他下面的子类中rootname也要进行修改。

程序如何写才可以实现,在线等………… 欢迎不能做的帮顶,能做的高手赐教!
...全文
141 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lionz1023 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 w000111 的回复:]
目录都放在一张表里面,指定父目录或者目录路径级数,程序里面递归遍历读出,
如果考虑效率再增加级数字段,这样不要递归,
rootname这个实在是冗余并且对效率没有什么提高,这样最大好处是可以实现目录任意分级
[/Quote]

给个实例可以吗?
我是想在实现任意分级的前提下尽量避免数据库复杂查询,但是老是没有一个好的思路!
w000111 2009-12-23
  • 打赏
  • 举报
回复
目录都放在一张表里面,指定父目录或者目录路径级数,程序里面递归遍历读出,
如果考虑效率再增加级数字段,这样不要递归,
rootname这个实在是冗余并且对效率没有什么提高,这样最大好处是可以实现目录任意分级
lionz1023 2009-12-23
  • 打赏
  • 举报
回复
我也是倾向第一个,不过用第一个的情况下,当修改类别表时 ,还是得要遍历数据表 把数据表中的rootname修改过来,
sql="update cataid set name='1级分类1' where id=1"
conn.excute(sql)
sql="select * from cataid where rootname='%1级分类%'"
rs.open sql,conn,1,3
do while not rs.eof
rs("rootname")=replace(rs("rootname"),"1级分类","1级分类1")
rs.update
rs.movenext
loop

+++++++
遍历信息表----修改,貌似也有点…………
老大有没有好点的表结构来实现多级目录功能??
yan11cn 2009-12-23
  • 打赏
  • 举报
回复
第一个吧 如果查询多 修改少
lionz1023 2009-12-23
  • 打赏
  • 举报
回复
上面两个方案如果是在不生成静态 并且访问量有点大的情况下 哪个个对访问速度影响较小,
lionz1023 2009-12-23
  • 打赏
  • 举报
回复
问题就是,我想在修改类别表的同时 也修改信息表,
第一个方案: 信息表中 也存在相同字段rootid, rootname, 修改类别同时也修改信息表的类别名,这样做方便读取的时候做 类别导航 select rootname from info
第二个方案: 信息表中只存在rootid不存在rootname,这样我读取数据时 需要类别名称只能通过
select b.rootname from info a,cataid b where a.rootid=b.rootid
yan11cn 2009-12-23
  • 打赏
  • 举报
回复
这已经是我能想到的最简单的方法了 每条数据只更新一次 那不是最少的吗。。。。
lionz1023 2009-12-23
  • 打赏
  • 举报
回复
只是修改名称 level不用变,用do while +replace是可以实现,如果数据量大会不是很慢 ?
yncloudy 2009-12-23
  • 打赏
  • 举报
回复
应该可以吧,用编写存储过程,遍历表,然后逐条update,name=name+“1”,rootname也应该可以做到。我以前实现过int型数据的相加,字符的也应该没问题吧。呵呵,请高手多多指教了。
yan11cn 2009-12-23
  • 打赏
  • 举报
回复
sql="update cataid set name='1级分类1' where id=1"
conn.excute(sql)
sql="select * from cataid where rootname='%1级分类%'"
rs.open sql,conn,1,3
do while not rs.eof
rs("rootname")=replace(rs("rootname"),"1级分类","1级分类1")
rs.update
rs.movenext
loop
asd1236987 2009-12-23
  • 打赏
  • 举报
回复
如果是,用update就可以了
suixianghappy 2009-12-23
  • 打赏
  • 举报
回复
嗯,顶...
asd1236987 2009-12-23
  • 打赏
  • 举报
回复
是修改name为name+leave,rootname为rootname+leave吗
knife_yu 2009-12-23
  • 打赏
  • 举报
回复
貌似用SELET查询的连接的表,不能一次更新吧!!关注一下!!

28,405

社区成员

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

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