zoukankan      html  css  js  c++  java
  • MySQL order by limit 分页数据重复问题 并 丢失其他数据

    使用 order by 与limit 同时使用 数据出现重复 并丢失其他数据

    使用了 下面的 方法  发现也没什么问题 

    Db::name('users')
    ->where(['is_disabled'=>0])
    ->field('id,nickname,team_son+team_grandson as sort,team_son,team_grandson')
    ->order('sort desc')
    ->page($page, 20)
    ->select();
     打印sql 语句 去运行  发现 第i 页 的数据 与 第 i+1 页 的 数据出现重复 并且 丢失了一些数据

    SELECT `id`,`nickname`,team_son+team_grandson as sort,`team_son`,`team_grandson` FROM `table_name` WHERE
    `is_disabled` = 0 ORDER BY `sort` DESC LIMIT 200,20


    经过学习 发现  在MySQL 5.6的版本上,优化器在遇到order by limit语句的时候,做了一个优化,即使用了priority queue。

    若再想 使用 order by 加 limit的 形式 

    1、 就只能 使用 索引 进行排序

    2、像我这样的情况 不能使用 索引字段的话 只能进行 双排序

    也就是   ORDER BY `sort` DESC,`id` 把索引字段作为 附加条件 进行排序 就可以了 

    SELECT `id`,`nickname`,team_son+team_grandson as sort,`team_son`,`team_grandson` FROM `users` WHERE
    `is_disabled` = 0 ORDER BY `sort` DESC,`id` ASC LIMIT 200,20


    原文链接:https://blog.csdn.net/qq_40816144/article/details/103940242

  • 相关阅读:
    Image Perimeters(图像周长)
    Power Strings(字符串的n次方)
    滑雪
    剪花布条
    SOJ题目分类
    Catch That Cow(捉住那头牛)
    Seek the Name, Seek the Fame(找名字,要成名)
    Avoid The Lakes(躲开湖水区)
    hash相关理论
    JAVASCRIPT共通関数数値チェック
  • 原文地址:https://www.cnblogs.com/renjiaqi/p/14750682.html
Copyright © 2011-2022 走看看