MySQL Order By排序混乱问题-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

MySQL Order By排序混乱问题

简介: 做积分排行榜页面时, 发现vue key值冲突, 如下: 因为key为数据在mysql中的主键, 在排除前端错误之后, 判断是mysql排序问题. mysql排序sql如下: 该sql使用score,和create_time作为排序条件, 查询结果如下: 结果乱序了.

问题描述

    做积分排行榜页面时, 发现vue key值重复,如下:

a494899da5fff619851364885c3cf464272c6325

    此处的key值为数据在mysql中的主键,在排除前端错误之后,判断是mysql排序问题. mysql排序sql如下:

b6f23b857d91e484db9ee5a174befdebffd1a96f

    该sql使用score和create_time作为排序条件,查询结果如下:

e412e9f2bd38b1dc310a87f777b55cbb2b0426ec5e7d50809220aff4f35779a3b689a6163efd51fd

       结果确实乱序了。

查找解决方案

       查找原因,发现score和create_time存在相同值,当相同的score和create_time有多条数据时,mysql会对这些数据进行随机排序,所以同一条SQL查出的结果会出现排序不同的情况。

       mysql官网对此有一些描述:

     If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, 
     and may do so differently depending on the overall execution plan. 
     In other words, the sort order of those rows is nondeterministic with respect to the nonordered columns.
       如果order by的字段有多个行都有相同的值,mysql会以随机的顺序返回查询结果,并且依据具体的执行计划会有不同。
     If it is important to ensure the same row order with and without LIMIT, 
     include additional columns in the ORDER BY clause to make the order deterministic. 
     For example, if id values are unique, you can make rows for a given category value appear in id order by sorting like this:
      如果排列的顺序对你很重要的话,可以额外添加排序条件,例如id字段是唯一的,可以考虑在排序字段中额外加个id去确保顺序稳定。

      我的方案: 排序条件改为 ORDER BY sas.score DESC,sas.statistics_point_id。statistics_point_id是该表的主键,问题解决了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章
最新文章
相关文章