Oracle+PHP,分页排序处理

原分页SQL如下:

SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."";

需要加入排序功能后的SQL:

SELECT * FROM (SELECT * FROM iteminfo ORDER BY infoid DESC) WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM (SELECT * FROM iteminfo ORDER BY infoid DESC) WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."";


2006.9.11 补充如下

其实上面的SQL居于并不能完全实现分页+排序的功能,其中的ORDER BY的字段因为正巧是数据表的主键,所以实现了排序的功能。当将这个主键字段换成其他的字段,则排序的效果就不能实现了。现改造SQL语句如下,可以实现分页+排序(非主键字段)的功能;

SELECT * FROM (SELECT * FROM (SELECT * FROM iteminfo ORDER BY disorder ) WHERE ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM (SELECT * FROM iteminfo ORDER BY disorder) WHERE ROWNUM<=".$pager ->offset().") ORDER BY disorder

经测试后通过!

No comments: