首先排除环境以及字符编码集的问题,目前我的数据库表中只有30条数据,其中有两个字段类型是varchar(max)和一个datetime类型字段,其余都是varchar类型,设置了主键,现在我需要根据STATUS_MARK1字段进行排序,字段类型是int。
执行结果如下:
返回结果和我预想的结果不一致,感觉是先执行了top再执行order by,但是又不是很像。
我现在是用hibernate进行分页,这样的结果造成我分页数据顺序错乱!求大神些指点迷津。
不明白原理,这样试试
select top 15 * from (select * from T_TIS_DOCTOR order by STATUS_MARK1 desc)
应该在ORDER BY 子句中加入主键或唯一键。具体参考 http://blog.csdn.net/shangboerds/article/details/5164536
以前也遇到同类的问题,是这样解决的
to Love?? 我按照你的意思来实现的,但是我发现这样的效率会不会很低啊!如果数据量不大估计没问题,如果数据量大了怕是有点慢哦。
而且这样做的话hibernate是不支持这种写法的,还得单独自己来写分页,以前的项目中,我发现都是直接"from tb order by c desc"的话,用hibernate的
分页会自动给先排序,然后返回当前查询页之前的所有数据记录再从记录中抽取当前页的数据内容啊!!!!
发表下自己的看法
看你结果的话,应该是top 10的部分不受order by的影响,
执行顺序可能是,
1.先降序
2.在选择去top 10的数据,但是top部分不受排序影响,还是默认升序
我记得老师有说过,top部分是不受order by影响的。
可以测试下,
假设得到的数据是正确的,就是顺序不对,倒过来输出就可以了。得到的结果集的,最好一条是第一条,一次序倒输出就可以啦。
不知道对不对,可以试试