浏览 1367 次
锁定老帖子 主题:遇到的数据库方面的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-25
CREATE TABLE Category ( id int(11) NOT NULL, name varchar(50) default NULL, parent_id int(11) default NULL, depth int(11), PRIMARY KEY (id), FOREIGN KEY (parent_id) REFERENCES Category(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 目录结构是一个典型的树形结构,而树形结构则会涉及到查找的递归问题。当要查找一个节点下所有的子节点的时候(或一个节点上的所有父节点),所谓“所有”即是从该节点之上或之下的任何节点,并不仅仅是其直接父或子节点,就要递归地往上(往下)查找直到目录树的父节点(叶节点)为止。当树的深度和广度都比较大的时候,这样的查找方式显然是比较费时费力的。其实引起这个问题的根本原因就是“一个节点只知道跟它紧邻节点的信息”。导致“树节点”目光如此短浅的罪魁祸首就是肚里墨水太少,消息闭塞,都是吃了没文化的亏啊!对于这样的一个常见问题有没有一个解决办法呢?比较自然会想到的一个方法就是,大力开展九年义务教育,多教教它族谱之类的,譬如“你现在是搞开发的,你老爹是开快餐店的,当初你爷爷可是拉三轮车的哦,你爷爷他爹还是打铁的呢。咱们的日子真是越过越红火啊!儿za,你可得记住,我们都是党的子孙哟”。要记住这么多东西,不多长个心眼那可不行那,因此得再向上面的表添加一个字段: CREATE TABLE Category ( id int(11) NOT NULL, name varchar(50) default NULL, parent_id int(11) default NULL, depth int(11), path varchar(500) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (parent_id) REFERENCES Category(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 其中path是这样定义的: 1.若为顶级目录,path为null; 2.否则,则为父目录path+'分隔符‘+父节点id(若父目录就是顶级目录则没有分隔符) 好,假如现在有一个搞开发的他想知道解放前他的祖先是干啥的,因为一开始他爹就跟他讲了好多故事,所以他很快就知道他祖先原来是闹革命的,根本就用不着一层一层往上去查。那么,假如一个想知道开理发店的张大胖他有多少后代呢,只要大声喊一句“诶,理发佬张大胖的后代来报道lei!”,下面听到召唤的“刷”地站直了排上队来还以为搞有奖竞猜呢。 sql语句是这样的: SELECT * FROM Category WHERE path LIKE 'path%’; 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |