zoukankan      html  css  js  c++  java
  • 分页数据有重复的问题

    前段时间,测试给了个bug ,前端显示时第一页和第二页有重复的数据,后台debug测试也有。把控制台打印的sql考到可视化工具跑一下,问题还是有。

    然后再去除分页,发现问题就没有了。出现问题点在于分页。后来请教了我们公司的大佬。说可能是因为你那个字段值有重复的情况,最好加一个可以保证唯一性的字段对数据进行排序。

    之前没改的sql

    select * from(
            select
            <include refid="Base_Column_List"/>,
            case
            when TRAIN_STATUS=1
            then '1'
            when TRAIN_STATUS=2
            then '2'
            when TRAIN_STATUS=3
            then '3'
            when TRAIN_STATUS=5
            then '5'
            when (to_char(TRAIN_START_DATE, 'yyyy-mm-dd') || TRAIN_START_TIME) >
            to_char(sysdate, 'yyyy-mm-ddHH24:mi')
            then '4-1'
            when (to_char(TRAIN_END_DATE, 'yyyy-mm-dd') || TRAIN_END_TIME) >
            to_char(sysdate, 'yyyy-mm-ddHH24:mi')
            then '4-2'
            else '4-3'
            end as STATUS
            from TB_TRAINING_INFO
            order by
            case
            when STATUS='1'
            then 1
            when STATUS='3'
            then 2
            when STATUS='4-1'
            then 3
            when STATUS='4-2'
            then 4
            when STATUS='4-3'
            then 5
            when STATUS='2'
            then 6
            else 7
            end asc
            )
            <where>
                <if test="trainName!=null and trainName!=''">
                    and TRAIN_NAME like '%' || #{trainName,jdbcType=OTHER} ||'%'
                </if>
                <if test="originatorName!=null and originatorName!=''">
                    and ORIGINATOR_NAME like '%' || #{originatorName,jdbcType=OTHER} || '%'
                </if>
                <if test="originatorOrgName!=null and originatorOrgName!=''">
                    and ORIGINATOR_ORG_NAME like '%' || #{originatorOrgName,jdbcType=OTHER} || '%'
                </if>
                <if test="trainStatus!=null and trainStatus!=''">
                    and TRAIN_STATUS = #{trainStatus,jdbcType=CHAR}
                </if>
                <if test="originator!=null and originator!=''">
                    and ORIGINATOR = #{originator,jdbcType=OTHER}
                </if>
                <if test="status!=null and status!=''">
                    and STATUS = #{status,jdbcType=OTHER}
                </if>
                and delete_flag='0'
            </where>

    从上面sql得到status他的值是有重复的,然后我再加一个字段问题解决了。附上修改sql

    select * from(
            select
            <include refid="Base_Column_List"/>,
            case
            when TRAIN_STATUS=1
            then '1'
            when TRAIN_STATUS=2
            then '2'
            when TRAIN_STATUS=3
            then '3'
            when TRAIN_STATUS=5
            then '5'
            when (to_char(TRAIN_START_DATE, 'yyyy-mm-dd') || TRAIN_START_TIME) >
            to_char(sysdate, 'yyyy-mm-ddHH24:mi')
            then '4-1'
            when (to_char(TRAIN_END_DATE, 'yyyy-mm-dd') || TRAIN_END_TIME) >
            to_char(sysdate, 'yyyy-mm-ddHH24:mi')
            then '4-2'
            else '4-3'
            end as STATUS
            from TB_TRAINING_INFO
            order by
            case
            when STATUS='1'
            then 1
            when STATUS='3'
            then 2
            when STATUS='4-1'
            then 3
            when STATUS='4-2'
            then 4
            when STATUS='4-3'
            then 5
            when STATUS='2'
            then 6
            else 7
            end asc,UPDATE_DATE desc
            )
            <where>
                <if test="trainName!=null and trainName!=''">
                    and TRAIN_NAME like '%' || #{trainName,jdbcType=OTHER} ||'%'
                </if>
                <if test="originatorName!=null and originatorName!=''">
                    and ORIGINATOR_NAME like '%' || #{originatorName,jdbcType=OTHER} || '%'
                </if>
                <if test="originatorOrgName!=null and originatorOrgName!=''">
                    and ORIGINATOR_ORG_NAME like '%' || #{originatorOrgName,jdbcType=OTHER} || '%'
                </if>
                <if test="trainStatus!=null and trainStatus!=''">
                    and TRAIN_STATUS = #{trainStatus,jdbcType=CHAR}
                </if>
                <if test="originator!=null and originator!=''">
                    and ORIGINATOR = #{originator,jdbcType=OTHER}
                </if>
                <if test="status!=null and status!=''">
                    and STATUS = #{status,jdbcType=OTHER}
                </if>
                and delete_flag='0'
            </where>

    总结:order by的时候最后在目标排序字段的基础上应该加上一个可以保证唯一性的字段对数据进行排序

  • 相关阅读:
    for, 类型转换和使用方法
    笔记,随时更改
    控制流程之while循环, for循环
    赋值,逻辑,运算符, 控制流程之if 判断
    常量,基本数据类型,输入输出,基本运算符
    介绍python由来, 安装python3.8.3 及其变量的定义, 小整数池
    数组去重多个条件
    vue 自定义指令
    截取指定名字的url参数
    常用的js
  • 原文地址:https://www.cnblogs.com/chiang28/p/11163515.html
Copyright © 2011-2022 走看看