能有更好的查詢方式
时间:2010-09-08
来源:互联网
我建立两个资料表作为分类用的资料表
我希望能够查询出来关联到父目录和子目录的栏位,可是我这样写好像等於查询了3个表...
程式码: sql
create table dirname(
dirname_id int,
name varchar(200),
PRIMARY KEY (dirname_id)
);
create table dir (
dir_id int,
parent_dir int,
child_dir int,
PRIMARY KEY (dir_id,parent_dir,child_dir)
);
insert into dirname (dirname_id ,name) values(0,'最上层1');
insert into dirname (dirname_id ,name) values(1,'最上层2');
insert into dirname (dirname_id ,name) values(2,'子目录1');
insert into dirname (dirname_id ,name) values(3,'子目录2');
insert into dirname (dirname_id ,name) values(4,'子目录3');
insert into dir (dir_id ,parent_dir,child_dir) values(0,0,2);
insert into dir (dir_id ,parent_dir,child_dir) values(0,0,3);
insert into dir (dir_id ,parent_dir,child_dir) values(0,0,4);
insert into dir (dir_id ,parent_dir,child_dir) values(0,1,3);
insert into dir (dir_id ,parent_dir,child_dir) values(0,1,4);
我希望能够查询出来关联到父目录和子目录的栏位,可是我这样写好像等於查询了3个表...
程式码: sql
select A1.name as parent, dirname.name as child from dir,dirname,dirname A1
where dir.child_dir=dirname.dirname_id AND A1.dirname_id=dir.parent_dir;
作者: ah11851152n 发布时间: 2010-09-08
你是希望子目录有很多父目录吗?不然不应该用这样n:m的关系来设计。
如果只是一个简单的树,那只要一个资料表就可以做出来:
如果只是一个简单的树,那只要一个资料表就可以做出来:
程式码:
create table `directory` (
`id` int not null auto_increment,
`parent` int,
`dirname` varchar (255) not null,
primary key (id),
key(parent)
);
作者: fillano 发布时间: 2010-09-09
看一下这一篇
http://webweb.cz.cc/show_article.php?aId=3154
http://webweb.cz.cc/show_article.php?aId=3154
作者: micmic3 发布时间: 2010-09-09
或许你会比较需要
Nested tree model
可以在一个select的动作中把所有的子树或是父节点给找出来
http://www.cnblogs.com/wllyy189/archive/2009/08/17/1547877.html

以上图为例子
要找出Fruit的所有子层
select * from tree where left > 2 and right <11;
要找出Cherry的所有父层
select * from tree where left < 4 order by left desc;
参考看看吧
Nested tree model
可以在一个select的动作中把所有的子树或是父节点给找出来
http://www.cnblogs.com/wllyy189/archive/2009/08/17/1547877.html

以上图为例子
要找出Fruit的所有子层
select * from tree where left > 2 and right <11;
要找出Cherry的所有父层
select * from tree where left < 4 order by left desc;
参考看看吧
作者: ricky 发布时间: 2010-09-09
不过用邻接表来表示树,维护的代价比较高。
作者: fillano 发布时间: 2010-09-09
引用自: fillano 於 2010-09-09 10:38
不过用邻接表来表示树,维护的代价比较高。
这个树状结构主要是应用在经常读取,却不常修改节点的情况下。
每修改一次节点就得重建整棵树
目前Propel,cakephp已经内建这种树状结构的支援了。
作者: ricky 发布时间: 2010-09-09
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28