一中大型网站,要求显示记录列表是这样的:1、VIP会员发布的信息比普通会员发布的信息都要优先显示(不按信息发布时间)2、VIP会员发布的信息按照兼顾原则给予显示:即如有5个VIP会员,就按发布的时间逐一给这5个会员显示所发布的信息,然后第6条显示信息时又是按这5个会员轮回显示他们的第二条信息,循环着。为了方便各位高手解答,预设简化数据表表table字段(5):
id  member[发布者]  content[信息内容]  types[会员类型]  date
一时想不出有什么好的SQL查语句或解决方案,请教各位高手了,谢谢!

解决方案 »

  1.   

    //为了查询效率,最好给五位会员一个区别于vip的身份.比如说supervip.如果不加,则需要增加查询条件
    (   
    SELECT *    
    FROM `table`    
    WHERE types='vip' and member in (vip1, vip2, vip3, vip4, vip5) //这五个为特殊vip,如果有特殊vip类型,则可省略后面的条件  
    ORDER BY date DESC    
    )   
    UNION (    
    SELECT *    
    FROM `table`    
    WHERE types='vip' and member not in  (vip1, vip2, vip3, vip4, vip5)//同上
    ORDER BY date DESC    
    )
    UNION(
    SELECT *    
    FROM `table`    
    WHERE types='common'
    ORDER BY date DESC
    )
    LIMIT  0, 30 
      

  2.   

    呵呵,跟前面我提到的那个搜索一样的,我只说思路,首先查找表中为vip的会员,然后union表中非vip的会员,这样就可以了。
      

  3.   

    RRDW,LS的代码可以保证类似:vip1
    vip2
    vip3
    vip4
    vip5
    vip1
    vip2
    vip3
    ...这样的轮询显示吗?
      

  4.   

    select * from table order by types第二个,建议数据表中,新增一个字段,保存member发布信息的id值,这个id值,属于该member自增。sID,member的msg提交时候,sID=1,
    然后再update table set sID = sID + 1 where id != LAST_INSERT_ID().确保最新一条msg的sID为1。这样,用sql语句 select * from table order by types,sID就差不多可以实现了。第一个order by types是将vip与普通会员区别开。sID是实现兼顾原则。
      

  5.   


    这个思路很好!就是有点恨晚,已存在的成千上万条记录难以给sID赋值。(要赋值只能再编个程序给不用的用户赋不同的sID值)。不知还有没有更佳的方法?
      

  6.   


    采取hzcenter 的思路,拟采取以下方案。增加aID字段查询显示记录列表语句:select * from table order by types,sID;但在用户发布(修改)信息后,执行下列代码:
    SQL1:select member from table group by member order by date desc
    CODE:
    $i=0;
    while($row1){//$row1为SQL1的搜索集合
     $i++;
     SQL2:update table set sID=$i where member='{$row1['member']};
    }
    这样应该可行吧,不知各位方家有没有什么建议?
      

  7.   

    update table set sID = sID + 1 where id != LAST_INSERT_ID() and member = '$member'
    漏了一个条件!修改资料就不用修改sID了!大批量也应该有好方法能解决的!不知道你具体情况