请兄弟帮忙。具体的需求是这样:
  现在有一个大型的商户门户,注册的N个商户,然后这些商户又发布了N条产品信息,然后提供一个搜索产品页面,搜索结果的规则是按级别排序(例如VIP排前等等),并且产品搜索结果集要符合一个规则(按用户级别不同,包含每个商户产品的返回结果需要小于一个与级别挂钩的数量,例如40,举个例子,A用户=VIP=40 ,意思就是说这个搜索结果的记录中A用户符合条件的记录不能大于40,别的用户都一样)。   不知道有兄弟明白我的意思吗,我对这个需求的第一反应是狗日的。   对于这个天方夜潭式的需求,不知道有那位兄弟指点下,有没有比较好的解决方法。

解决方案 »

  1.   


    create table #a (id int identity(1,1),name varchar(10),col varchar(100))insert into #a values('a','衣服')
    insert into #a values('a','衣服,裤子')
    insert into #a values('a','衣服,上衣')
    insert into #a values('a','衣服,裤子,上衣')
    insert into #a values('a','上衣')insert into #a values('b','衣服')
    insert into #a values('b','衣服,裤子')
    insert into #a values('b','衣服,上衣')
    insert into #a values('b','衣服,裤子,上衣')
    insert into #a values('b','上衣')create table #b (name varchar(10),vip int)insert into #b  values('a',3)
    insert into #b  values('b',2)
    select a.name,col from
    (
    select a.*,vip=(select count(1) from #a where [name]=a.name and id<=a.id) from #a a) a
    inner join #b b
    on a.name=b.name and a.vip<=b.vipname       col
    ---------- -------
    a          衣服
    a          衣服,裤子
    a          衣服,上衣
    b          衣服
    b          衣服,裤子
      

  2.   

    上面的语句忘了加查询条件了
    不好意识啊select a.name,col from
    (
    select a.*,vip=(select count(1) from #a where [name]=a.name and id<=a.id) from #a a where col like '%衣服%') a
    inner join #b b
    on a.name=b.name and a.vip<=b.vip
      

  3.   

    排序
    把 VIP 高的拍在前边
    select a.name,col from
    (
    select a.*,vip=(select count(1) from #a where [name]=a.name and id<=a.id) from #a a where col like '%衣服%') a
    inner join #b b
    on a.name=b.name and a.vip<=b.vip order by b.vip desc