Oracle 服务器中 Jqgrid 分页的问题

Posted

技术标签:

【中文标题】Oracle 服务器中 Jqgrid 分页的问题【英文标题】:Issue in Jqgrid pagination in Oracle server 【发布时间】:2021-02-05 08:48:21 【问题描述】:

我们有一个代码来对数据进行排序和分页并将数据呈现到 Jqgrid。该代码在连接到 SQL 服务器时工作正常。那就是对每个页面进行分页时会按预期返回不同的数据。但是在某个时间点后连接到 oracle 服务器时,会呈现重复的数据。 Oracle 和 SQL Server 都有相同的数据。 Jqgrid 页面中的参数和页面数在服务器端按预期工作。那是在分页起点和块大小正确传输到服务器端。在对数据库中 varchar 类型但也包含数字的列进行排序后,会观察到重复值。数据库状态列包含值 3 和 A,在观察到分页问题时,使用状态列对重复数据进行排序后。从某种意义上说,重复数据,第 2 页上的数据将与第 3 页上的数据相同。任何帮助将不胜感激。提前致谢... 查询一:-

select *   from ( select row_.*, rownum rownum_  from ( Select x,y,z,status FROM tablename c WHERE status IN('in condition seperated with status') ORDER BY status asc ) row_  where rownum <= 30 )    where  rownum_ > 20; 

查询二:-

select *   from ( select row_.*, rownum rownum_ from ( Select x,y,z,status FROM tablename c WHERE status IN('in condition seperated with status') ORDER BY status asc ) row_  where rownum <= 20 )    where rownum_ > 10;

这里查询 1 和 2 总是返回相同的结果。

【问题讨论】:

我唯一能建议你的是观察你的服务器端代码。检查发生了什么以及传递给 sql 查询的参数以及它是如何构建的。您是使用 jqGrid for php 还是您有自己的分页排序代码等?任何细节和代码都会有所帮助 @TonyTomov 我们在 Jsp 和 Java 中的实现与服务器端相同。由于它是服务器端分页,我们已经实现了自己的代码用于分页目的。在调试时,所有数据似乎都在正确获取。但似乎没有像预期的那样填充到 Jqgrid。 在浏览器控制台查看服务器返回的内容,如果没问题,就可以发布你的jqGrid代码并指定使用哪个版本的jqGrid。 @TonyTomov 感谢您对此进行调查。请找到修改后的问题。附上示例代码。 【参考方案1】:

如果 ORDER BY 子句列中的两个或多个值相同,则必须始终提供另一个辅助列进行排名。否则,数据返回只有我们预期的获取正确结果的概率。得到正确答案的可能性与掷骰子相同。第二列必须是唯一的以获得准确的结果。虽然您可以假设他们会根据输入的顺序自行排序

select *   from( select row_.*, rownum rownum_ from( Select x,y,z,status FROM tablename c  WHERE status IN('in condition seperated with status') ORDER BY status,x asc ) row_  where rownum <= 30 )    where rownum_ > 20;

希望 x 是一个唯一值。 DBMS_RANDOM.VALUE 也可以用于 if 是一个特定于 oracle 的查询,而不是添加额外的 order by 子句

【讨论】:

以上是关于Oracle 服务器中 Jqgrid 分页的问题的主要内容,如果未能解决你的问题,请参考以下文章

jqgrid分页后,自定义查询数据怎么得到所有页的某列值的合计

jqgrid 如何获取分页的信息:当前页和总页数,作为参数传递到url

基于jqgrid + ashx + nhibernate的分页

Oracle11g 带分页的选择查询

jqgrid能前台分页么?jqgrid前端分页和排序的实现

页面上有两个jqGrid表格时,冲突问题