IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 【已解决】Laravel paginate()分页后 出现数据重复 或 数据丢失问题 -> 正文阅读

[PHP知识库]【已解决】Laravel paginate()分页后 出现数据重复 或 数据丢失问题

【已解决】Laravel paginate()分页后 出现数据重复 或 数据丢失问题

问题情景描述:

  1. 已知有一张学生表与一张消费积分表。现根据每个学生的消费积分对学生表进行正序排列(即积分从高到低排列)。
  2. 学生表students 与 消费积分表orders表为一对多关系(一条学生数据 对应 多条投票积分数据)。

数据表格示例

学生表(students)

idname(学生名称)
1李苦瓜
2脸盆王
3老木棍

消费积分表(orders)

idvote(投票)students_id(学生表id)is_pay(是否支付)
1211
2331
3410
4521
5211
6121
7321
8211
9631

错误代码示例

此时获取的数据后前端使用laravel自带的分页$data->links();会发生丢失数据 或者数据重复的问题

public function studentList(Request $request){
		//获取学生列表
        $data = Student::select('students.*',DB::raw('(SELECT SUM(contribution_value) FROM orders WHERE orders.students_id = students.id and orders.is_pay = 1) as sum_contribution_value'))
        ->orderBy('sum_contribution_value','desc')
        ->paginate(10);
        return view('h5.student.studentList',compact('data'));
    }

错误数据渲染后的示例图:
在这里插入图片描述
在这里插入图片描述

解决方案:

正确代码示例:

public function studentList(Request $request){
		//获取学生列表
        $data = Student::select('students.*',DB::raw('(SELECT SUM(contribution_value) FROM orders WHERE orders.students_id = students.id and orders.is_pay = 1) as sum_contribution_value'))
        ->orderBy('sum_contribution_value','desc')
        >orderBy('students.id','desc')//加入此行代码。order by因为排序不唯一,所以每次查询数据的顺序不一样,导致分页截取的数据片段有重复数据或造成数据丢失
        ->paginate(10);
        return view('h5.student.studentList',compact('data'));
    }

返回数据出现丢失或重复的原因

由上述错误代码示例中所示:->orderBy('sum_contribution_value','desc')仅使用了这此标识进行排序,但此表示不是对整个返回的数据而言不是唯一标识!
Mysql使用order by排序时因为排序标识不唯一,所以每次查询数据的顺序不一样,导致分页截取的数据片段有重复数据或造成数据丢失。
所以加入最后在用唯一标识字段进行下排序即可(比如表的唯一id或者订单编号之类的带有唯一约束的字段)。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 15:56:45  更:2021-07-15 15:59:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 0:35:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码