美文网首页大数据学习web框架开发报错集锦
MySQL order by同值随机排序导致分页展示重复

MySQL order by同值随机排序导致分页展示重复

作者: xiaogp | 来源:发表于2021-01-29 17:38 被阅读0次

    摘要:MySQLflask-sqlalchemy

    问题复现

    使用flask-sqlalchemy对MySQL表进行操作,对score字段进行排序,输出分页对象paginate,page_num=10。

    paginate = PiraScore.query.filter(PiraScore.datetime == '2020-12-07')\
                    .order_by(PiraScore.score.desc())\
                    .with_entities(PiraScore.ent_name, PiraScore.score)\
                    .paginate(page, page_num, False)
    

    在前端查看分页效果,第一页


    第一页.png

    第二页重复出现同一条数据


    第二页.png

    问题分析

    • 原因:排序后的前两页都是同分的数据,MySQL的ORDER BY在处理排序列中有多个行具有相同的值时,是自由以任何顺序返回这些行,并且根据整体执行计划的不同,返回值可能会有所不同。 换句话说,这些行的前后顺序是不确定的

    • 导致结果:会导致在分页中不同的页出现重复的数据,同时由于重复数据占据了位置,原有的其他数据丢失

    解决方案

    在ORDER BY子句中加入其他列使的顺序确定,比如加入主键id,修改如下

    paginate = PiraScore.query.filter(PiraScore.datetime == '2020-12-07')\
                    .order_by(PiraScore.score.desc(), PiraScore.id)\
                    .with_entities(PiraScore.ent_name, PiraScore.score)\
                    .paginate(page, page_num, False)
    

    相关文章

      网友评论

        本文标题:MySQL order by同值随机排序导致分页展示重复

        本文链接:https://www.haomeiwen.com/subject/kopqtltx.html