精华内容
下载资源
问答
  • 在使用SHH进行J2EE轻量级项目开发时,用到了oracle9i的数据库,但是在对表中的数据进行排序分页时,有时会莫名其妙的出现排序错乱,翻页后数据显示重复的问题。开始以为是hibernate的问题,跟踪代码将hibernate生成...

    在使用SHH进行J2EE轻量级项目开发时,用到了oracle9i的数据库,但是在对表中的数据进行排序分页时,有时会莫名其妙的出现排序错乱,翻页后数据显示重复的问题。开始以为是hibernate的问题,跟踪代码将hibernate生成的sql语句输出到控制台然后在PL/SQL中执行,发现生成的sql语句有点问题,执行的结果数据集根本就不对,就是Hibernate的问题,但是这个问题很容易就被发现,毕竟hibernate作为开源项目,并且应用广泛,如果是BUG,早就应该被fix掉。后来仔细一想,还是认为是oracle数据库在排序的方式上与sql server等数据库有区别,在oracle中用排序分页,比如第3页的数据, 需要用到rownum函数,但是rownum函数非常特别,它并不像sql server中的top函数好用。比如我要取user表中按字段userName排序的第3页(10条数据/页)数据,按照正常的理解应该这样写SQL,如下:

    select * from user where rownum <= 20 and rownum > 10 order by userName

    其实不然,oracle是先排序再生成rownum顺序号,所以以上这句SQL是无效的,返回的结果不正确。应该这样写:

    select * from (select * from (select * from user order by userName) where rownum <= 20) where rownum >=10

    也就是说先排序了后,取出前面的20条数据,然后再从20条数据中取出后10条数据,这样就完成了排序分页的功能。是不是很郁闷,郁闷的问题还在后面,对于userName字段来说,数据重复的可能性不大,但如果对于其他非必填的数据字段来说,加入此字段名称为birthDate,但此字段又有很多null值,此时如果按birthDate进行排序分页,那么用刚才正确的写法排序分页后的数据又不对了,依然会出现最初的问题。百思不得其解,没办法,GOOGLE一下,发现oracle要取排序后的某部分记录,最好是在排序字段中包含主键或不会重复的字段,这样排序分页的问题就迎刃而解。最终偶采用了在排序表达式后加入了主键的排序,问题得以解决。

    在这里做个备案,以免日后记性不好做无用功。

    展开全文
  • 当点击 datagrid 表头某一列的小三角图标时,easyui 本身是有排序的,但是在当我们对 datagrid 进行了分页的情况下,点击排序只是对当前页的数据进行排序,而需求需要我对数据库里面的所有数据进行排序,这样的话...

    说明一下:
    当点击 datagrid 表头某一列的小三角图标时,easyui 本身是有排序的,但是在当我们对 datagrid 进行了分页的情况下,点击排序只是对当前页的数据进行排序,而需求需要我对数据库里面的所有数据进行排序,这样的话只能从后台先排好序再返回了。

    看了一下文档,发现点击小三角图标时会触发 onSortColumn 事件,于是我们只要在触发这个事件的时候重新向后台请求一遍 datagrid 的数据好了。

    那就直接上代码吧~~

    var sortOrder = "asc"; // 排序方式,asc:正序,desc:倒序
    var sortField = "NickName"; // 要排序的列名称
    
    // 初始化数据列表
    function initDatagrid() {
        $('#dg').datagrid({
            url: '/api/Member',
            method: "get",
            striped: true,
            border: true,
            selectOnCheck: false,
            checkOnSelect: false,
            remoteSort: true, // 定义是否从服务器排序数据,要设置为true
            singleSelect: false,
            idField: 'MemberId',
            pagination: true,
            rownumbers: false,
            pageSize: 20,
            fitColumns: true,
            columns: [[                
                    ...
            ]],
            // 把要排序的列名称与正序/倒序这两个参数也传到后台进行处理
            onBeforeLoad: function (params) {
                params.nickName = $("#nickName").val();
                params.phone = $('#phone').val();
                params.sortField = sortField;
                params.sortOrder = sortOrder;
            },
            // 点击某一列进行排序时触发的事件
            onSortColumn: function (sort, order) {
                sortField = sort;  // 要排序的列名称
                sortOrder = order;  // 正序or倒序
    
                $('#dg').datagrid('reload');
            }
        });
    }

    不过这样还没完善,在 easyui 里本来点击 onSortColumn 就是请求了一次后台的,这一点可以打断点测试一下。
    所以,我们需要把原来的那次请求屏蔽掉,否则会请求两次后台。
    具体的做法,就是修改 jquery.easyui.js / jquery.easyui.min.js 文件。

    jquery.easyui.js / jquery.easyui.min.js 文件中搜 remoteSort,找到下面这段代码

    if(opts.remoteSort){
    _646(_63c);
    }else{
    _647(_63c,$(_63c).datagrid("getData"));
    }
    opts.onSortColumn.call(_63c,opts.sortName,opts.sortOrder);
    };

    if 里面执行的代码注释掉就好了。(在上图中是 _646(_63c);,有可能不一样??)。
    PS:datagridtreegrid 都有 remoteSort 这个东东,别搞错了!!

    End.

    展开全文
  • 当点击 datagrid 表头某一列的小三角图标时,easyui 本身是有排序的,但是在当我们对 datagrid 进行了分页的情况下,点击排序只是对当前页的数据进行排序,而需求需要我对数据库里面的所有数据进行排序,这样的话...

    说明一下:
    当点击 datagrid 表头某一列的小三角图标时,easyui 本身是有排序的,但是在当我们对 datagrid 进行了分页的情况下,点击排序只是对当前页的数据进行排序,而需求需要我对数据库里面的所有数据进行排序,这样的话只能从后台先排好序再返回了。

    看了一下文档,发现点击小三角图标时会触发 onSortColumn 事件,于是我们只要在触发这个事件的时候重新向后台请求一遍 datagrid 的数据好了。

    那就直接上代码吧~~

    var sortOrder = "asc"; // 排序方式,asc:正序,desc:倒序
    var sortField = "NickName"; // 要排序的列名称
    
    // 初始化数据列表
    function initDatagrid() {
        $('#dg').datagrid({
            url: '/api/Member',
            method: "get",
            striped: true,
            border: true,
            selectOnCheck: false,
            checkOnSelect: false,
            remoteSort: true, // 定义是否从服务器排序数据,要设置为true
            singleSelect: false,
            idField: 'MemberId',
            pagination: true,
            rownumbers: false,
            pageSize: 20,
            fitColumns: true,
            columns: [[                
                    ...
            ]],
            // 把要排序的列名称与正序/倒序这两个参数也传到后台进行处理
            onBeforeLoad: function (params) {
                params.nickName = $("#nickName").val();
                params.phone = $('#phone').val();
                params.sortField = sortField;
                params.sortOrder = sortOrder;
            },
            // 点击某一列进行排序时触发的事件
            onSortColumn: function (sort, order) {
                sortField = sort;  // 要排序的列名称
                sortOrder = order;  // 正序or倒序
    
                $('#dg').datagrid('reload');
            }
        });
    }

    不过这样还没完善,在 easyui 里本来点击 onSortColumn 就是请求了一次后台的,这一点可以打断点测试一下。
    所以,我们需要把原来的那次请求屏蔽掉,否则会请求两次后台。
    具体的做法,就是修改 jquery.easyui.js / jquery.easyui.min.js 文件。

    jquery.easyui.js / jquery.easyui.min.js 文件中搜 remoteSort,找到下面这段代码

    if(opts.remoteSort){
    _646(_63c);
    }else{
    _647(_63c,$(_63c).datagrid("getData"));
    }
    opts.onSortColumn.call(_63c,opts.sortName,opts.sortOrder);
    };

    if 里面执行的代码注释掉就好了。(在上图中是 _646(_63c);,有可能不一样??)。
    PS:datagridtreegrid 都有 remoteSort 这个东东,别搞错了!!

    End.

     

    转载于:https://www.cnblogs.com/dandelion-drq/p/8700054.html

    展开全文
  • 本菜鸡在做项目时,使用 MongoDB 数据库时遇到了一个问题,这个问题是这样的:对数据进行排序后并进行分页,发现可能在第一页查询到的数据,在第二页的查询会再次出现,第一页跟第二页会查询到一条一摸一样...

    问题复现

    本菜鸡在做项目时,使用 MongoDB 数据库时遇到了一个问题,这个问题是这样的:对数据进行排序后并进行分页,发现可能在第一页中查询到的数据,在第二页的查询中会再次出现,第一页跟第二页会查询到一条一摸一样的数据,包括主键,真是见了鬼了!

    请教大神

    菜鸡苦思冥想了一天,还是想不出个之所以然道理出来,最终没办法,只好去请教大神。

    我:为啥呢?
    大神:(苦思后)你排序所用的字段,是否能保证唯一性呢?
    我:啊这,(看了下代码),不能诶
    大神:呵呵
    我:。。。。

    解决问题

    其实,这个问题的根源在于我们排序所用的字段不能确保唯一性,因此,数据库每次排序的结果并不能保证是一样的。举个例子,我们有 A,B,C 三条数据,我们对其做一个排序,这三条数据用于排序的字段的值是相同的,所以,数据库每次对它进行排序之后,得到的结果可能是 A,C,B,也有可能是 A,B,C,这都是说不准的。

    当我们对排序后的数据进行分页之后,我们要取第一页的数据(我们假设每一页只取一条数据),数据库进行排序后得到的结果是 A,C,B,显然我们取得了 A;然后我们要取第二页的数据,这次数据库排序之后的数据是 C,A,B,好家伙,这次查询出来的还是 A!这就是我们问题的根源。

    解决这个问题也很简单,只需要保证我们排序字段的唯一性即可,至于如何保证,那就见仁见智了。

    展开全文
  • 点击“Latitude”,JS就会自动按“Latitude”字段从小到大(升序)将待输出的数据进行排序;再次点击“Latitude”字段,JS会自动按“Latitude”字段从大到小(降序)将待输出的数据进行排序。 该笔记假定读者已阅读...
  • 项目有对点赞(praise)数量进行排序的需求,但前端传值和数据库(mysql)中都是用String,如果直接在sql使用order by praise话,排序效果是如下图。 很明显,这是不符合产品需求。想实现按数字大小...
  • 在SQL语句中,在检索语句的最后加上一个order by+排序列名就可以对该列的数据进行排序。排序的方式有两种:升序(ASC)和降序(DSC)。  前些天修改项目代码时发现,按照这种规则实现排序时,只有当数据库中的...
  • 摘要:C#源码,数据库应用,数据排序 C#对统计结果进行排序,实际是对数据库查询结果进行排序,将图书销售数量前五名的书籍按降序排序,在SQL进行,将排序后的数据显示在窗格,在平时的应用也是很常见的一种方式...
  • 对JSON数据进行排序

    千次阅读 2018-11-26 17:19:30
    最近在项目中需要对未存入到数据库中的数据进行排序,故使用Comparator进行排序。 代码实现如下 package com.test.sort; import java.text.ParseException; import java.text.SimpleDateFormat; import jav...
  • select * from song where id in ("id1","id2","id3")order by instr("id1,id2,id3",id); 传来的数组会按顺序占位传值 但数据查时是不按...通过order by instr数组的顺序 (id是表中的关键字)进行展示数据的顺序 ...
  • 数据库中,如果不排序检索的顺序,数据一般将以它在底层表中出现...可以使用order by子句对select检索的数据进行排序: select prod_name from Products order by prod_name 未排序的数据:  使用order by...
  • 数据库中排序 需要考虑数据完整性 排序会占用查询性能 而在应用中处理不存在这个问题 数据库比应用更容易触到性能瓶颈 应用扩展易于数据库扩展 在数据库响应结果前 需要一直保持着与数据库连接 应用中排序可加快...
  • 筛选数据 Select (关键字) from(表)where(列) 查询固定条件 Select *from 学生信息 where 姓名=’...排序(对于考试编号为101成绩进行排序) Select * from 成绩信息 where 考试编号=‘101‘ Order by 分数 as...
  • mysql查看数据库中所有表行数,并进行排序:进行数据库迁移或还原后,可以通过比较行数,检查数据是否正确。mysql>useinformation_schema; mysql>selecttable_name,table_rowsfromtableswhereTABLE_SCHEMA='...
  • oracle数据库中,字段数据类型是varchar2类型即string,而实际存储是数字,这时候根据order by 对数字进行排序 如果根据order by 直接进行排序的换可能导致在排序过程中数字大于9可能存在排序错误比如 11排在...
  • PHP与MySQL相比具有如下优势: 1、考虑整个网站可伸缩性和整体性能,在应用层(PHP)中排序明显会降低数据库的负载,从而提升整个网站扩展能力。而数据库的排序,实际上成本是非常高,消耗内存、CPU,
  • 如何通过数据库中的SQL Server 2014中的查询语句关键字进行倒序排序查询或升序排序查询的教程方法 作者:张国军_Suger 开发工具与关键技术:SQL Server 2014、SQL、SQL关键字       &...
  • 使用 fast Json 对遍历数据库中的文本字段进行遍历并排序和是否启用 最近 项目中第一次写到了对 数据库中的文本字段保存的json 格式进行遍历 ,使用 fast json解决了这问题记录下 数据库保存的这个这样的数据: { ...
  • 有一个测试数据集是关于不同省份用户在电商网站行为记录,包括浏览量和购买,需要统计一下每个省份用户数量有多少。 【SQL语句】 SELECT Province,count(*) as count FROM user_action GROUP BY Province ...
  • 数据库中根据查询显示ListView数据,我希望能实现查询的数据进行排序,然后将排序后的数据存储在cursor对象中,怎么排序listview? 能不能通过名字进行排序? Cursor c = ourDatabase.query(DATABASE_TABLE...
  • 数据库应用,常常采用“两阶段多路归并排序算法”来解决对海量数据的排序问题(这里海量数据是指数据大小远远超过了数据库可用主存大小,无法将所有数据一次性载入主存进行排序)。    该算法包括...
  • 日常工作,我们可能会碰见比较特殊的数据,比如数组和字母掺杂的情况,我们也要对他们进行排序,并且按照我们想要的方式排序下来:接下来我就要介绍的是我碰见的情况,并考虑如何优化的,因为是公司的数据,我就不...
  • SELECT * FROM T_tabWHERE id IN ( 2, 1, 4 ) ORDER BY CHARINDEX(RTRIM(CAST(id AS VARCHAR(30))), '2, 1, 4') 红色字体部分: ... 按照想要顺序进行排列 转载于:https://www.cnblogs.com/FFRDXRQ/p/7008...
  • 视图函数中获取数据库中的内容,传递到Template中,采用for循环进行展示时,有时需要对数据进行排序,此时,可以采用forloop函数:{% for user in all_users %} span class="">{{ forloop.counter }} ... {% endfor ...
  • 在实际业务,有一些场景需要对一组列表数据先分组后然后组内排序,这时不能单纯使用传统group by和order by语句了,因为会提示xxxx字段必须在group by聚合函数,为了解决此问题,我们可以使用ROW_NUMBER ( ) ...
  • 发现用一个type进行排序后,做分页查询,第一页的数据和第二页的数据有重复 怀疑是order by 时,两次排列的顺序不一致 看到业务描述的问题可以得到的结论order by排序不稳定,还有第一个印象就是,type肯定是不唯一...
  • 在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题。在Oracle规定,在Order by排序时缺省认为null是最大值,所以如果是ASC升序则被排在最后,而DESC降序则...
  • 数据库中排序 vs 应用层中排序

    千次阅读 2010-07-31 11:38:00
    在实际运行中,数据库中数据往往以HASHtables、BTREE等方式存贮于内存,操作速度很快;同时INDEX已经进行了一些预排序;很多应用中,数据库排序是首选。而在应用层中排序,也必然在内存中进行,与数据库相比具有如下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,016
精华内容 2,406
关键字:

数据库中的数据进行排序