• APP瀑布流分页问题——领取,使用等操作即消失问题


    问题

    需求:需要在APP开发一个类似评论审核的功能,当点击审核通过时,此评论从审核列表之中清除.列表根据审核的创建时间倒序
    难点:当清除的之后,会对后续分页的结果产生影响

    如操作前分页结果

    
    (分页),分页内容1 分页内容2 分页内容3
    1, A B C
    2, D E F
    3, G H I
    
    待请求
    4, J K L
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    接下来,我们将第二页之中的 E数据清除

    结果变为

    
    期望
    (分页),分页内容1 分页内容2 分页内容3
    1, A B C
    2, D   F
    3, G H I
    
    待请求
    4, J K L
    
    实际
    (分页),分页内容1 分页内容2 分页内容3
    1, A B C
    2, D F G
    3, H I  
    
    待请求
    4, K L M
    
    没有返回的数据
    K
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    当我们在请求数据的时候,会跳过原本应该在第四页输出的

    适用范围

    本博文只适用于操作完,被操作的数据不再出现在列表内。

    数据结构

    表字段字段含义
    idid主键
    userId用户id
    status状态 1 未审核 2 审核成功
    create_time创建时间

    基本分页方案

    基本SQL
    SELECT * FROM t WHERE userId=XXX AND status=1 ORDER BY create_time LIMIT xx , xx

    解决方案

    1. 外传入Id

    方案基本逻辑:
    将上一条排序在末尾的数据,他的ID作为查询条件,一次性最多取十条。

    适用范围:
    存在一个可以排序的id

    具体方案:
    SELECT * FROM t WHERE userId=XXX AND status=1 AND id > #{minId} ORDER BY create_time LIMIT 10

    但是,我们当前排序的逻辑却是使用create_time,因此单纯使用 miniId 却是与我们的逻辑不符
    因此,我们便需要使用两个字段进行排序字段create_time 与 id 。

    此方案不能使用一条SQL解决,需要使用两条SQL

    SELEC * FROM  t WHERE  userId=XXX AND id > `#{minId}` AND  AND status=1create_time=`#{create_time}` ORDER BY create_time , id LIMIT 10
    
    # 确定上条SQL条数,变量为num
    if( num > 0 ){
    	SELECT * FROM  t WHERE  userId=XXX  AND status=1 AND create_time > `#{create_time}` ORDER BY create_time ,id  LIMIT num
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. 前端将被操作的数据ID,作为额外id传入

    方案基本逻辑:
    将被操作的数据作为额外参数传入,在排序的时候便可以将被操作的数据一起进行排序

    方案适用范围:

    1. 操作后的数据,其排序字段并不会被修改

      如: 在领取后,并不会对排序字段create_time进行修改

    2. 当前查询之中拥有额外可作为索引的字段
      在查询SQL之中存在查询条件 userId=XXXX
      6

    具体方案:

    简单方案:
    将SQL修改为

    SELECT * FROM t WHERE userId=XXXX AND (status=1 OR id IN (XXX)) ORDER BY create_time LIMIT XX , 10

    3. 前端灵活的加载逻辑

    方案基本逻辑:

    1. 用户操作第十一条数据
    2. 前端计算出,当前这条数据在第二页,第二页数据开始的队列索引为10
    3. 删除10往后的所有数据(包括下标为10)
    4. 重新加载第二页的数据,分页其实下标调整为 2

    方案适用范围:

    当前屏幕无法一次性加载单页内的所有数据。若屏幕能展示,单页内的所有数据。则会有很明显的数据较少的样式

  • 相关阅读:
    你的GPU能跑Llama 2等大模型吗?用这个开源项目上手测一测
    Java安全 CC链6分析
    配置Linux文件句柄数
    C专家编程 第11章 你懂得C,所以C++不再话下 11.2 抽象---取事物的本质特性
    WIN32 动态 UAC 提权
    python.tkinter设计标记语言(转译2-html)
    KY12 玛雅人的密码
    Linux 进程管理 实时调度类及SMP和NUMA
    B/S端界面控件DevExtreme中文指南——如何自定义应用主题?
    3年软件测试经验面试要求月薪22K,明显感觉他背了很多面试题...
  • 原文地址:https://blog.csdn.net/ArroGance_X/article/details/127848520