企业和category怎么对应?
没有看懂啊

解决方案 »

  1.   


    【企业表】中的CorpCategory字段中保存的是【分类表】中的CategoryID字段,可保存多个, 
    关键是,只保存这个分类的最后一级,如分类1最多有三级,则只保存第三级的分类ID 然后【企业表】中的CorpCategory字段
    只会保存【分类表】表中的二级或者三级分类而我现在是需要通过一个【分类表】的CategoryID
    获取所有引用了其三级或者二级分类ID的企业信息不知道是不是明白点了,表达不清楚的地方,非常抱歉~
      

  2.   

    你贴的图片看不到,给你一个得到指定节点及其所有子节点的例子,供参考~~--测试数据
    CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
    INSERT tb SELECT '001',NULL ,N'山东省'
    UNION ALL SELECT '002','001',N'烟台市'
    UNION ALL SELECT '004','002',N'招远市'
    UNION ALL SELECT '003','001',N'青岛市'
    UNION ALL SELECT '005',NULL ,N'四会市'
    UNION ALL SELECT '006','005',N'清远市'
    UNION ALL SELECT '007','006',N'小分市'
    GO--查询指定节点及其所有子节点的函数
    CREATE FUNCTION f_Cid(@ID char(3))
    RETURNS @t_Level TABLE(ID char(3),Level int)
    AS
    BEGIN
    DECLARE @Level int
    SET @Level=1
    INSERT @t_Level SELECT @ID,@Level
    WHILE @@ROWCOUNT>0
    BEGIN
    SET @Level=@Level+1
    INSERT @t_Level SELECT a.ID,@Level
    FROM tb a,@t_Level b
    WHERE a.PID=b.ID
    AND b.Level=@Level-1
    END
    RETURN
    END
    GO--调用函数查询002及其所有子节点
    SELECT a.*
    FROM tb a,f_Cid('002') b
    WHERE a.ID=b.ID
    /*--结果
    ID   PID  Name       
    ------ ------- ---------- 
    002  001  烟台市
    004  002  招远市
    --*/DROP FUNCTION f_Cid
    DROP TABLE tb
      

  3.   

    原来是图片看不到
    这个是地址:http://photo1.bababian.com/upload12/20080802/850AF3410A207D5E3E27D217E124928C_240.jpg
    http://photo1.bababian.com/upload12/20080802/F416FE8D9ACFD820D51970C35A093CE3_240.jpg
      

  4.   

    回4楼高手获取指定节点及其所有子节点这个我已经获取,谢谢你~~~你的方法,我会好好参考
    我的问题是,我获取了这些子节点,还需要一个个机械的到企业表中去匹配CorpCategory字段中,
    是否包含我的子节点ID,感觉很麻烦,想请问,有没有比较好的方法。
      

  5.   

    回8楼如果可以看到图片的话
    比如:我的【企业表】的中“企业1”,
    引用了【分类表】中的“分类112(CategoryID=5)”和“分类21(CategoryID=8)
      

  6.   

    如果最多只有3级,我建议做如下修改:
    1.分类表多加一个列,用来标示分类的级别:
      gree : 分 1,2,3级2.企业表的分类可以有3列,分别存放,1,2,3级的类别
      parentid, categoryid, sonid这样查询的时候可以先判断这个类别是哪个等级的,然后根据等级查询相关字段-- 1级类可以查
     select * from 企业表 from parentid = @categoryid -- 2级类可以查
     select * from 企业表 from categoryid = @categoryid -- 3级类可以查
     select * from 企业表 from sonid = @categoryid 个人看法,仅供参考
      

  7.   

    看漏了一点:一家公司可以属于多个类。
    根据这点,建议表设计做下修改-- 分类表
    create table t_category
    (
    categoryid int primary key,
    catetoryname varchar(50), 
    parentid int, -- 父类id
    gree int -- 分类等级,值为 1,2,3
    )-- 企业表
    create table t_company
    (
    cropid int primary key,
    cropname varchar(50)
    )-- 企业所属类别表
    create table t_company_category
    (
    cropid int,
    parentid int,-- 父类id
    categoryid int , -- 类别id
    sonid int -- 子类id
    )-- 查询1级类下的公司
    select a.* from t_company a 
        inner join t_company_category b on a.companyid = b.companyid 
        where b.parentid = @categoryid -- 查询2级类下的公司
    select a.* from t_company a 
        inner join t_company_category b on a.companyid = b.companyid 
        where b.categoryid = @categoryid -- 查询3级类下的公司
    select a.* from t_company a 
        inner join t_company_category b on a.companyid = b.companyid 
        where b.sonid = @categoryid 这样效率会好些,仅供参考