表 category 字段  
category_id(类别编号)        category_name(类别名称)     f_id(所属父类)
101                              服饰                           0
102                              男装                           101
103                              衬衫                           102
表 products 字段
products_id(类别编号)        products_name             category_id(类别名称)     
1                                 李宁运动服衬衫                     103这个为表的结构:
由 商品李宁运动服衬衫 可以查询出相关的类别,现在每个类别
边上有个复选框checkbox 可以让其选中,当三个类别都选中
的时候让他输出最小的类(103  衬衫)
当(服饰,男装)选中的时候让其选中 男装
总之选中被选择中最小的子类请教这个sql怎么写请大家多多指教谢谢

解决方案 »

  1.   


    CREATE get_info
    @cid1 int         ---- 一级ID
    @cid2 int = NULL, ---- 二级ID
    @cid3 int = NULL  ---- 三级ID
    as
    BEGINIF @cid1 IS NULL
    BEGIN
       RAISERROR('必须选择 服饰', 16, 1);
    END
    ELSE
        IF @cid2 IS NULL
           SELECT * FROM Category WHERE Category_id = @cid1
        ELSE
           IF @cid3 IS NULL
              SELECT * FROM Category WHERE Catergory_id = @cid2
           ELSE
              SELECT * FROM Products WHERE Category_id = @cid3END
    go
    没测试, 不好意思. (估计你要的就是这个了)
      

  2.   

    Sorry, 应该是CREATE PROC get_info
    ....
      

  3.   

    估计你是用高级语言,
    伪代码如下:
    声明字符串变量 @s     
    设置 @s 初始值 @s='1=1 and'
    如果 checkbox1 选中则 @s=@s+' or a.category_name=''服饰'''
    如果 checkbox2 选中则 @s=@s+' or a.category_name=''男装'''
    如果 checkbox3 选中则 @s=@s+' or a.category_name=''衬衫'''
    然后写 SQL 语句:'select top 1 a.category_name from @t a'+
    ' left join @t b on b.f_id=a.category_id'+
    ' left join @t c on c.f_id=b.category_id'+
    ' where'+@s+ 
    ' order by a.category_id desc'