|
![]() | 作者: group [group]
![]() |
登录 |
用户:19800128(当尘埃落定时) ================================================== 消息组:我的好友 ================================================== 消息类型:聊天记录 ================================================== -------------------------------------------------- 消息对象:93353( 可爱的小狐) -------------------------------------------------- 2003-04-27 00:55:31 当尘埃落定时 我要找美工,有没有朋友推荐? (通过服务器中转) 2003-04-27 00:52:04 可爱的小狐 没有哦,你问rd 2003-04-27 00:56:01 当尘埃落定时 rd不在线 2003-04-27 00:52:35 可爱的小狐 明天吧 2003-04-27 00:56:31 当尘埃落定时 有没有支持无限目录树的程序代码和数据库结构? 2003-04-27 00:54:19 可爱的小狐 什么用的?举个例子说说 2003-04-27 00:58:56 当尘埃落定时 像易趣的产品分类一样的,要支持无限分类 2003-04-27 00:56:07 可爱的小狐 那你自己写就可以哦,其实很简单的,主要是数据库的思路好就可以,问小淘吧 2003-04-27 01:00:38 当尘埃落定时 我知道很简单,但是想了两天了 2003-04-27 00:57:29 可爱的小狐 其实数据库部分问小淘可以的,程序应该不难 2003-04-27 01:01:24 当尘埃落定时 我的数据库结构也简单 class_id parent_class_id class_name class_level 2003-04-27 01:01:40 当尘埃落定时 现在我这个数据库,就是程序难 2003-04-27 00:58:48 可爱的小狐 但你要考虑好分类的再分类,因为你需要无限分类的话那也要支持无限的下层分类哦 2003-04-27 00:59:11 可爱的小狐 不是吧,居然把你难到了?晕 2003-04-27 01:04:17 当尘埃落定时 无限分类就要根据parent_class_id来判断,任何一个class_id都可以成为其他class_id的parent_class_id 2003-04-27 01:04:37 当尘埃落定时 这个思路就可以解决无限分类的问题,我现在就是显示的时候有麻烦 2003-04-27 01:00:58 可爱的小狐 对哦,那程序有什么难的? 2003-04-27 01:01:21 可爱的小狐 不会把,难在那? 2003-04-27 01:07:23 当尘埃落定时 while($class_id) { while(child_class_id()) { while(child_class_id()) ……就这样无限循环下去 } } 2003-04-27 01:04:12 可爱的小狐 晕,这样你要写多少?不需要的 2003-04-27 01:08:09 当尘埃落定时 怎么做 2003-04-27 01:06:32 可爱的小狐 我不知道能不能找到,以前我写过类似的,但已经是半年前的东西,不知道在哪,我要找找 2003-04-27 01:10:39 当尘埃落定时 我写了一个函数,给你看看 2003-04-27 01:07:15 可爱的小狐 好的 2003-04-27 01:11:56 当尘埃落定时 不过没有写完,思路堵住了 2003-04-27 01:12:01 当尘埃落定时 function GetChild($class_id){ global $g_cDBBGS; $sql = "select class_id,class_name from class where parent_class_id = $class_id"; $g_cDBBGS->query($sql); while($g_cDBBGS->next_record()) { $class_id = $g_cDBBGS->f(class_id); $class_name = $g_cDBBGS->f(class_name); GetChild($class_id); } } 2003-04-27 01:08:23 可爱的小狐 给我看看嘛 2003-04-27 01:10:05 可爱的小狐 你的函数想表达什么? 2003-04-27 01:14:26 当尘埃落定时 自己调用自己造成一个循环 2003-04-27 01:20:14 可爱的小狐 好,我终于忙完了,呵呵,你的程序想做什么,给点思路我哦 2003-04-27 01:24:57 当尘埃落定时 就是要显示一个目录树 2003-04-27 01:25:12 当尘埃落定时 function GetChild($class_id){ global $g_cDBBGS; $sql = "select class_id,class_name,class_level from class where parent_class_id = $class_id and class_id <> 1"; echo $sql."\n"; $g_cDBBGS->query($sql); while($g_cDBBGS->next_record()) { $class_id = $g_cDBBGS->f(class_id); $class_name = $g_cDBBGS->f(class_name); $class_level = $g_cDBBGS->f(class_level); echo "<option value=$class_id>".addSpace($class_level)."$class_name</option>\n"; //$result = $result.addSpace($class_level).$class_id.$class_name."<BR>\n"; GetChild($class_id); //select class_id,class_name,class_level from class where parent_class_id = 1 and class_id <> 1 //select class_id,class_name,class_level from class where parent_class_id = 2 and class_id <> 1 //select class_id,class_name,class_level from class where parent_class_id = 3 and class_id <> 1 //select class_id,class_name,class_level from class where parent_class_id = 7 and class_id <> 1 //当做完parent_class_id = 7时,结果集$g_cDBBGS应该读取next_record(),再次循环,但是这个程序没有再次循环 //怀疑是结果集被重写了,因此需要有一个自动建立数据库对象的思路,现在还没有想到 } } 2003-04-27 01:25:24 当尘埃落定时 这段代码可以实现一部分功能 2003-04-27 01:22:50 可爱的小狐 就是程序吧目录树显示出来对吧,判别该分类有没有下分类,有就显示该分类的小分类....一直下去? 2003-04-27 01:26:47 当尘埃落定时 比如我期望的目录树是 1 |-2 | |-3 |-4 |-5 2003-04-27 01:27:09 当尘埃落定时 这段代码只能显示出 1 |-2 | |-3 2003-04-27 01:27:23 当尘埃落定时 对 2003-04-27 01:27:40 当尘埃落定时 看看哪里需要改动? 2003-04-27 01:25:16 可爱的小狐 等等,我在想,我觉得用两个表会好很多,一个做为根,另外一个做分支,这样就不会乱了,否则判断就好象很乱 2003-04-27 01:29:27 当尘埃落定时 如果我有多层分支的话那不是要一大堆表? 2003-04-27 01:30:45 当尘埃落定时 我有一个根数据叫做“所有类别” 2003-04-27 01:31:02 当尘埃落定时 是不显示的,所有的类都是它的子类 2003-04-27 01:27:55 可爱的小狐 不需要,只要两个而已,一个是根表放1,6 另外的放分支表 1 |-2 | |-3 |-4 | |-5 | |-7 | 6-8 | |-9 2003-04-27 01:32:14 当尘埃落定时 有区别吗? 2003-04-27 01:28:33 可爱的小狐 可以哦,因为你的分支是无穷的哦,对用户来说是透明的 2003-04-27 01:32:54 当尘埃落定时 具体说说思路 2003-04-27 01:29:15 可爱的小狐 意思是你只有一个根1吗?不会出6这个东西? 2003-04-27 01:33:54 当尘埃落定时 对,这个根已经被隐含了 2003-04-27 01:30:19 可爱的小狐 哪你的大分类就相当于根,简单点说电子产品就是的根,根下面有电脑,家电,通讯,再下面又分.... 2003-04-27 01:34:44 当尘埃落定时 那和我现在这样分没有区别啊 2003-04-27 01:31:20 可爱的小狐 对哦,你还没考虑多个大目录的问题哦,你看意趣的大目录就几个,其实你需要的就是他哪套思路而已 2003-04-27 01:35:53 当尘埃落定时 我只有一个大目录,就是叫做所有类别的,其他的其实全是它的子目录 2003-04-27 01:36:13 当尘埃落定时 不能接收么? 2003-04-27 01:32:28 可爱的小狐 有是有一点的,我再想想...东西好想传不过来 2003-04-27 01:32:59 可爱的小狐 没反应..... 2003-04-27 01:37:54 当尘埃落定时 http://www.netyd.com/untitled1.gif http://www.netyd.com/untitled2.gif 2003-04-27 01:40:36 当尘埃落定时 理论上来说,我那个函数在列举完了第一个子分类后就会去列举第二个 2003-04-27 01:37:25 可爱的小狐 在想... 2003-04-27 01:41:28 当尘埃落定时 恩 2003-04-27 01:44:45 当尘埃落定时 始终只能显示单路 2003-04-27 01:41:02 可爱的小狐 class_level是代表他是第几层的吧 2003-04-27 01:45:50 当尘埃落定时 对 2003-04-27 01:42:17 可爱的小狐 哦,在想.... 2003-04-27 01:48:36 可爱的小狐 哦,用一个表是可以的,我还在想... 2003-04-27 01:52:58 当尘埃落定时 对,很难的 2003-04-27 01:53:42 当尘埃落定时 select class_id,class_name,class_level from class where parent_class_id = 1 and class_id <> 1 <option value=2>花天酒地</option> select class_id,class_name,class_level from class where parent_class_id = 2 and class_id <> 1 <option value=3> 无赖地痞</option> select class_id,class_name,class_level from class where parent_class_id = 3 and class_id <> 1 <option value=7> 再次无聊</option> select class_id,class_name,class_level from class where parent_class_id = 7 and class_id <> 1 2003-04-27 01:50:01 可爱的小狐 不会的,可以想的,我原来写的程序没了,数据库还在....晕,但能想出来 2003-04-27 01:54:00 可爱的小狐 可以的,不会很难,在想.... 2003-04-27 01:58:02 当尘埃落定时 我也在做 2003-04-27 01:55:57 可爱的小狐 你去http://www.myrain.org/downloads.php?sort=1 2003-04-27 01:56:30 可爱的小狐 音频工具哪你就看到了 2003-04-27 02:00:53 当尘埃落定时 还是单线的吧 2003-04-27 01:57:35 可爱的小狐 谁说的,你现在在去看,我在增加 2003-04-27 02:02:10 当尘埃落定时 这种显示我能做到 2003-04-27 02:02:35 当尘埃落定时 我要看一个在同一页面完全打开的目录树~ 2003-04-27 01:58:57 可爱的小狐 哪就可以哦,哪就说明思路对了,往下显示有什么不可以,晕 2003-04-27 01:59:24 可爱的小狐 其实能做这个就能做树显示了,我倒 2003-04-27 02:03:41 当尘埃落定时 这种显示只不过是调用了一次 select class_name from class where parent_class_id = $class_id 而已,然后就是单纯的显示数据 2003-04-27 02:00:19 可爱的小狐 你等一下,我大概的写一下 2003-04-27 02:04:55 当尘埃落定时 不能的,比如我在安装制作里面,往上回溯父类是很简单的,因为只有一条线,没有分支,而找出安装制作下面一层的也很容易,问题就在于我要显示子类的子类 2003-04-27 02:01:56 可爱的小狐 哦,我明白了,你要问什么了,你等一下...我再想想 2003-04-27 02:06:46 当尘埃落定时 我要自动判定某个类别下面有多少层子类,并把这些子类全部显示出来 2003-04-27 02:03:11 可爱的小狐 对 2003-04-27 02:07:19 当尘埃落定时 难吧 2003-04-27 02:03:52 可爱的小狐 还是有办法的吧... 2003-04-27 02:08:03 当尘埃落定时 因为子类里面又有子类,谁也不知道要多少次循环,所以自己调用自己是正确的 2003-04-27 02:08:37 当尘埃落定时 就是在函数里面调用自己的思路,是正确的,会产生一个自动的循环 2003-04-27 02:12:39 当尘埃落定时 function GetChild($class_id){ global $g_cDBBGS; $sql = "select class_id,class_name,class_level from class where parent_class_id = $class_id and class_id <> 1"; echo $sql."\n"; $g_cDBBGS->query($sql); while($g_cDBBGS->next_record()) { $class_id = $g_cDBBGS->f(class_id); $class_name = $g_cDBBGS->f(class_name); $class_level = $g_cDBBGS->f(class_level); echo "<option value=$class_id>".addSpace($class_level)."$class_name</option>\n"; //$result = $result.addSpace($class_level).$class_id.$class_name."<BR>\n"; GetChild($class_id); //select class_id,class_name,class_level from class where parent_class_id = 1 and class_id <> 1 //select class_id,class_name,class_level from class where parent_class_id = 2 and class_id <> 1 //select class_id,class_name,class_level from class where parent_class_id = 3 and class_id <> 1 //select class_id,class_name,class_level from class where parent_class_id = 7 and class_id <> 1 //当做完parent_class_id = 7时,结果集$g_cDBBGS应该读取next_record(),再次循环,但是这个程序没有再次循环 //怀疑是结果集被重写了,因此需要有一个自动建立数据库对象的思路,现在还没有想到 } } 2003-04-27 02:10:56 可爱的小狐 嗯,思路比较难想... 2003-04-27 02:15:59 当尘埃落定时 这种显示分类和一般的不一样的,一般的比如最多三层,我就手工写三个循环也就是了 2003-04-27 02:12:12 可爱的小狐 您好,我已经下班哦!我上班的时候会与你联系的!抱歉! 2003-04-27 02:16:09 当尘埃落定时 SHIT 2003-04-27 02:12:51 可爱的小狐 没什么头绪... 2003-04-27 02:32:20 当尘埃落定时 有眉目么? (通过服务器中转) 2003-04-27 02:32:35 当尘埃落定时 我手工写三层循环就没有问题 (通过服务器中转) 2003-04-27 02:28:49 可爱的小狐 没有,在想... 2003-04-27 02:29:11 可爱的小狐 呵呵,多了你不就累死了吗? 2003-04-27 02:34:04 当尘埃落定时 对啊,所以嘛,技术难点就在这里哦,和你以前写的不一样吧 2003-04-27 02:31:02 可爱的小狐 对哦,我只要显示当前的一层就可以了,这是个好题目哦,有搞头.... 2003-04-27 02:38:30 当尘埃落定时 最郁闷的是,不知道为什么我只能显示单线的目录 2003-04-27 02:35:09 可爱的小狐 呵呵,我现在就是弄不明这个问题哦 2003-04-27 02:40:20 当尘埃落定时 我想了两天了,才通过自己调用自己实现显示单线目录树上 真辛苦,明天继续想,我去睡觉,你慢慢郁闷 2003-04-27 02:36:57 可爱的小狐 想到了把程序给我,呵呵 2003-04-27 02:41:47 当尘埃落定时 难哦,做出来了自然是要共享,但是现在先要想,到星期一我们还是都想不出来的话,就去郁闷小陶 2003-04-27 02:38:19 可爱的小狐 同意... 2003-04-27 02:42:38 当尘埃落定时 这个功能做完,我这边网站的技术攻关就完成了1/3! 2003-04-27 02:39:15 可爱的小狐 好吧,我再想想....bye 2003-04-27 02:43:09 当尘埃落定时 恩 8 [此贴被 晓澜(group) 在 04月27日03时50分 编辑过] |
地主 发表时间: 04/27 02:42 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
用LDAP就行了 |
B1层 发表时间: 04/27 02:54 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
这种情况使用文本保存数据具有最好效率,最容易实现的代码 如局限于sql+php 就取得最深目录数然后for,for中判断当前是否有下一目录 就是说在你的函数外边加一个for |
B2层 发表时间: 04/27 04:20 |
![]() | 回复: SysHu0teR [syshunter] ![]() |
登录 |
class_id(parent_class_id){ 查询; 得到分类目录; if parent_class_id中有子分类{ 打印所有子分类; class_id(总分类->子分类); } 这只是一个打印分类的递归思路,具体实现起来~`` [此贴被 SysHu0teR(syshunter) 在 04月27日11时16分 编辑过] |
B3层 发表时间: 04/27 11:36 |
![]() | 回复: group [group] ![]() |
登录 |
就是要具体的实现,很难的 LDAP本身做不了递归吧,还是要自己写 我今晚先试试用数组 |
B4层 发表时间: 04/27 19:34 |
![]() | 回复: ricky [ricky] ![]() |
登录 |
我对数据库不太明了,不过这种东西用递归最合适。用循环好像不太好控制 |
B5层 发表时间: 04/28 08:43 |
![]() | 回复: group [group] ![]() |
登录 |
用循环做不了的 我有新成果 代码: 谁能把ShowClasses改成一个递归?帮帮忙,我已经糊涂了 [此贴被 晓澜(group) 在 04月28日14时44分 编辑过] |
B6层 发表时间: 04/28 12:57 |
![]() | 回复: group [group] ![]() |
登录 |
数组的话,老实和尚帮忙啊,这个就完全和数据库无关了! |
B7层 发表时间: 04/28 12:59 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
变态佬! 一开始就在聊天室和你说用数组,你说数组不行,要用循环,只要知道多少循环就行了,现在又说循环不行,要用数组,不知道等一下给你解决了你又说要用啥的了 下面为本论坛数据库的列表文本,因为这个是文本,所以很方便的增加子类,在适当的位置加入就行了。运行的时候也是读入数组。你非用SQL也不外是增加一个可以让得到位置的标示就行了。 我已经测试过,我随便增加一个子类,不管在那级。都能一按进入精华区就全部所有之类显示出来,甚至同时把帖子都显示出来也可以的。而且方法不只一种。你都可以想到根据层数增加空格了,应该快成功了,多多努力^_^ #根目录 ##安全基地 ###菜鸟乐园 ###黑客进阶 ###病毒专区 ###UNIX系统 ##电脑技术 ###网吧专题 ###编程破解 ###网站建设 ###电脑门诊 ###硬件天空 ###网络集成 ##非技术性文章 ###轻松一刻 ###一池萍碎 ###民谣音乐 ###茶余饭后 ##站务管理区 PS:使用LDAP的话你根本就不需要这个表了,也不需要计算了,直接打印出来就已经是你要的东东了,就像dir /a:d /s 一样了 |
B8层 发表时间: 04/28 14:44 |
![]() | 回复: group [group] ![]() |
登录 |
MD,你就不能写一个递归给我? 知道你的思路了,不错,我试试,MD |
B9层 发表时间: 04/28 14:50 |
![]() | 回复: group [group] ![]() |
登录 |
问题已经解决,没有用数组和文件,直接递归查询数据库,效率不低 表结构 class_id parent_class_id class_name class_level 代码 代码: |
B10层 发表时间: 04/29 00:29 |
![]() | 回复: quest [quest] ![]() |
登录 |
以后谁把聊天记录帖出来我跟谁没完!!!! 什么东西嘛。看着头痛...我根本就看不下去。。。 |
B11层 发表时间: 04/29 08:34 |
![]() | 回复: meady [meady] ![]() |
登录 |
如果真的考虑无限目录的话,我觉得最好能非递归话,递归太耗资源 真的有必要一下把所有结构都读出来吗 |
B12层 发表时间: 04/30 20:30 |
![]() | 回复: signal [signal] ![]() |
登录 |
有必要,为了减少你脑细胞的死亡率,递归不失为一个好办法。算法开销方面并不是很大,只是一个堆栈的大小问题。比循环在时间复杂度上小多了。 |
B13层 发表时间: 05/01 19:32 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号