有谁知道阿里巴巴的数据排序,同一个客户的供应信息不是连续出现的,都是交叉出现的,(据说是先取每一个用户的一条供应信息显示出来,第二轮再取每一个用户的供应信息显示出来,接着把剩余的全部取出来,按时间倒叙输出。。不知道这种设想是不是正确的,最主要这样取,sql语句要怎么写啊???)
我这里有供应表A:字段如下:
id(主键) uid(用户id) title(供应标题) puttime(发布时间)level(用户等级5,4,3,2,1)
level越高级别越高,1为免费用户
现在要实现level为2以上的用户供应信息交叉出现,并要排在免费用户前面(免费用户就按时间倒叙输出,不要交叉出现)请问这样的语句要怎么写???

解决方案 »

  1.   

    伪代码:(不过貌似效率超低。。)
    //取得需要混淆的用户。
    select * from 供应表A where level>2 order by id//获得所有内容的数组
    row[]//取得需要混淆的用户的总数
    select * from 供应表A COUNT(id) as max where level>2 order by id
    //混淆。当然,具体怎么混淆,随便你怎么写了。for (i=0,i<(max-1),i++)
    {
      
      if(row[i]['uid']<>row[i+1]['uid']))//当未出现连续2条同用户记录时。这里可以通过and 来限制连续几条。
      {
        row[i]['list']=row[i]['id'];//list直接等于id
      }
      else if (row[i]['uid']==row[i+1]['uid']))//当出现连续2条同用户记录时。
      {
        row[i+1]['list']=row[i]['list']+1;//list直接等于第一条记录的list加1。
         row[i+2]['list']=row[i+1]['id'];//list第3条换到第2条记录的位置上。
      }//这里的i+1,i+2之类的。可以改为i+n。再对n进行循环。

    //获得等于大于2用户排列的最大数
    row[max-1][list]
    //获得正常排序用户
    select * from 供应表A where level<2 order by puttime
    row2[]row2[0][list]=row[max-1][list]+1//取得正常排序用户的max
    select * from 供应表A COUNT(id) as max where level<2 order by puttimefor (i=0,i<(max-1),i++)
    {
     row2[i][list]=row2[i][list]+1;//累加。
    }//执行完上面操作后,就可以直接排序了。上面操作可以每天执行一次。//直接按list排序。select * from 供应表A order by list 
    //完成