zoukankan      html  css  js  c++  java
  • MySQL分页时出现的数据重复问题

    
    
    在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页。但是,当limit遇到order by的时候,可能会出现翻到第二页的时候,竟然又出现了第一页的记录。
    如:
    SELECT
      `post_title`,
      `post_date`
    FROM
      post
    WHERE
      `post_status` = 'publish'
    ORDER BY
      view_count desc
    LIMIT
      5, 5
    
     使用上述SQL查询的时候,很有可能出现和LIMIT 0,5相同的某条记录。而如果使用如下方式,则不会出现重复的情况:
     SELECT
      *
    FROM
      post
    WHERE
      post_status = 'publish'
    ORDER BY
      view_count desc
    LIMIT
      5, 5
    
    
     但是,由于post表的字段很多,仅仅希望用这两个字段,不想把post_content也查出来。为了解决这个情况,在ORDER BY后面使用了两个排序条件来解决这个问题,如下:
     SELECT
      `post_title`,
      `post_date`
    FROM
      post
    WHERE
      `post_status` = 'publish'
    ORDER BY
      view_count desc,
      ID asc
    LIMIT
      5, 5
    
      按理来说,MySQL的排序默认情况下是以主键ID作为排序条件的,也就是说,如果在view_count相等的情况下,主键ID作为默认的排序条件,不需要我们多此一举加ID asc。但是事实就是,
      MySQL再order by和limit混用的时候,出现了排序的混乱情况。
    三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
  • 相关阅读:
    c#查找窗口的两种办法
    也说自动化测试
    定位bug的基本要求
    c#调用GetModuleFileNameEx获取进程路径
    对比PG数据库结构是否一致的方法
    C#调用endtask
    提bug
    接口测试的结果校验
    ProcessExplorer使用分享
    C++如何在r3静态调用NT函数
  • 原文地址:https://www.cnblogs.com/deeptester-vv/p/14626473.html
Copyright © 2011-2022 走看看