首页 新闻 会员 周边

一个表设计问题(大家来看看,帮忙解决)

0
[已解决问题] 解决于 2010-09-10 13:37

多级分类表结构设计

Id CaName ParentId ..(Path,CreateTime...)

主要就这三个字段 。一级一级往下面递归来实现无限极分类。

我想要查询出来的每条子分类记录都有他父分类的名称。(Id CaName ParentId ParentCaName)却怎么也搞不出来了。在群里一问,人家说这种设计本身就是个错误。

我纳闷了!

后台我就想是不是要建连个表呢,一个父分类表,一个子分类表。只要一个分类下面有子分类,那就把它归到父分类。那这样就都能查询出来了。

希望大家建议。谢谢了!

 

 

 

 

问题补充: 我想要查询出来子分类的每条记录都有个父分类的名称。
nyth的主页 nyth | 初学一级 | 园豆:154
提问于:2010-09-10 11:52
< >
分享
最佳答案
0

这个设计是可以的

你想查找谁的子分类呢?总要有个目标吧。

拿国家的地域举例子。

就是省、市、县的例子

数据格式为

100000   北京     000000

100100   海淀     100000

100200   朝阳     100000

100101   海淀中关村   100101

 

什么叫所有子分类,这个是相对的概念,海淀相对于北京来说是子分类,但是相对于中关村来说是父分类,概念要搞清楚。

比如说查询北京的子分类

select * from district where parentid='100000'

结果就是

海淀

朝阳

你想同时显示父分类的名称的话,就需要自连接,表自连接

 

 

qq我没有

 


DECLARE @District TABLE (
id
VARCHAR(10),
parentid
VARCHAR(10),
[name] VARCHAR(10)
)
INSERT INTO @District VALUES ('1000','0000','北京')
INSERT INTO @District VALUES ('1001','1000','海淀')
INSERT INTO @District VALUES ('1002','1000','朝阳')
SELECT * FROM @District
SELECT d1.id,d1.parentid,d1.[name] AS ChildName,d2.[name] AS ParentName
FROM @District d1 INNER JOIN @District d2 ON d1.parentid =d2.id
WHERE d1.parentid='1000'
Virus-BeautyCode | 小虾三级 |园豆:1619 | 2010-09-10 12:09
我想查找所有子分类,以及所属父分类的名称。却怎么也搞不出来了。
nyth | 园豆:154 (初学一级) | 2010-09-10 12:14
谢谢你了,我就是想要同时查询出来父分类名称。可以了。
nyth | 园豆:154 (初学一级) | 2010-09-10 13:17
其他回答(3)
0

你的设计没错,ParentId直接指向ID就可以实现无限递归了

程序里只要写递归方法进行获取

public void GetList(int parentId,TreeNode parentNode)
{

       var childList=GetChildListByParent(parentId);

        foreach(var item in childList)
    {

                var childNode=new TreeNode;

                if(HasChildNode(item))

                {

                          GetList(item,childNode);//递归调用

                 }

         }
}

kyo-yo | 园豆:5587 (大侠五级) | 2010-09-10 12:17
0

你这个设计足够满足需求了,

SELECT Id CaName ParentId FROM dbo.Demo

order by ParentID

这样分组 就非常清晰了,取数据就按每组每组来取就OK

HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-09-10 12:25
0

用优良的表设计完全可以做到不借助代码来递归,

比如五个字段:

ID,Name,ParentID,Code,Order,CurState

其中Code类似于它的所有路径信息:如2,2/5/8,2/4等。

查询可以用like '2/%'查询所有2下面的子节点

 

http://www.cnblogs.com/downmoon/archive/2009/10/23/1588405.html

邀月 | 园豆:25475 (高人七级) | 2010-09-10 13:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册