不用存储过程!!
下面是获取一个栏目的新闻
select * from news where class=3  -- 获取ID 为3 的栏目的新闻
要获取多个栏目的新闻,如何写呢??
因为栏目很多,用where..and...方式写的太长了,有什么简短,高效的办法没??
select * from news where .......

解决方案 »

  1.   

    select * from news where class=3 or class=4 or ......
      

  2.   

    select * from news where class between 3 and 100
      

  3.   

    select * from news where class in (......)
      

  4.   

    用 select * from news where in(1,22,34,45) 虽然可以,但有个疑问!我想获取每个栏目下的所有的子栏目,就拿上面来说吧,获取1 栏目的同时要包含所有他的子栏目新闻,获取22栏目的同时要包含所有22的子栏目,获取34栏目的同时要包含所有34的子栏目,,,,,,,,,,, 怎么做到??(栏目表已经写好了,字段为 ID,ParentId,Name)
      

  5.   

    select * from news where id in(1,22,34,45)
    union all
    select * from news where ParentId in(1,22,34,45)
      

  6.   

    如果子栏目级别比较多,那么一个SQL就你的表结构设计就有问题了,而且按照你的要求根本实现不了,只能用存储过程来实现了。事实上设计表不要完全按照什么狗屁设计模式来做表设计,应该是根据需求的多样性来做表的结构设计。
    比如你的表ID,ParentId,Name 这个就设计上来说没有任何问题,但是在文章存储上你只会保存文章与栏目叶级节点(做文章表外键)的关系而已,那么中间有多少中间级节点只能通过一层层的查询来完成,感觉一顶很糟糕吧,我觉得是这样的。ID,ParentId,Name 这个结构由于节点级别很多,而且查询关系很多的,通常不要用int类型来做,建议用varchar类型,适当设置字符串位数来定制级别,这个在很多情况下查询更简单,效率也更高。
      

  7.   

    感觉你的表设计上有问题,栏目级别比较多为什么设计时不增加一列专门存放级别呀,就像设计BOM表是多级模式。
      

  8.   

    select * from news where class in(3,4,5,6...)