公司最近出现一个比较奇怪的问题,选择器在选择的时候,前面的几页基本是重复的.
本地开发完美没有任何问题。测试环境却怎么也不行。最后排查只有数据库不一致.服务器用的oralce.
打印出相关语句,如下类似:
select temp2.* from(
select rownum num,temp1.* from(
select u.contact,count(u.contact) as cnt from users u
where ….
ordery by cnt desc
) temp1 where rownum<=n1
)temp2 where temp2.num>n2
查看之后发现问题所在.
首先根据cnt排序,cnt 相同的数据有很多个,对于cnt相同的数据,并没有给它一个排序规则,所以就根据数据库的取出的先后顺序来给它排序了
因此就出现了上面的情况
解决方法:将order by cnt,改成 order by cnt desc,u.contact desc,就可以了
如下:
select temp2.* from(
select rownum num,temp1.* from(
select u.contact,count(u.contact) as cnt from users u
where ….
ordery by cnt desc,u.contact desc
) temp1 where rownum<=n1
)temp2 where temp2.num>n2