加两个表:
黑店表(badshop): userid,shopid,crdate
黑货表(badprod): userid,prodid,crdate示例:某用户查询他想看到的商品的关键语句:
select * from
(
select *,rn=row_number() over(order by xx)
from 你原来的结果集 a
left join badprod b on b.userid=@userid and a.prodid=b.prodid
where 你原来的条件集 and b.prodid is null
) t
where rn between 100 and 110

解决方案 »

  1.   

    把用户不想看到的商品都存到一个黑货表(badprod)中,
    查询时,把黑货表中的数据剔除掉。剔除的方式无非有:
    1. not in
    2. not exists
    3. left join + null的判断
    4. 正向、逆向判断结合:建一个 用户-商品表:userid,prodid,isvisible,crdate.isvisible的0和1分别表示存的是红货还是黑货。这样可以根据数据量来灵活存储,但逻辑更加复杂。我给出的是第3种方案的示例。用原结果集去left join badprod,如果不在badprod表中,则badprod.prodid将会是null,也就是我们需要的记录。
    另外,row_number()是2005的排序函数,如果是2000的话,就用其它方式分页,比如top+order by.