order by 導致分頁出現重複數據問題

原因

有時候我們需要按照時間排序, 並配合 limit 進行分頁查詢.

但是, 當 order by 的時間相同的時候 (數據不唯一), 系統對數據的排序可能變得隨機化, (即一會兒這條數據在前面, 一會兒這條數據在後面).

所以, 當翻頁的時候我們很容易便看到了重複的數據.

解決辦法

在使用 order by 的時候, 在本身需要排序的 目標字段 之後再加上一個 唯一字段 (比如PK或者UNIQUE字段), 保證順序的唯一性.

數據庫: postgresql

SQL
select * from tb_login_info order by login_time limit 5 offset 0;
select * from tb_login_info order by login_time limit 5 offset 5;

由於login_time 不唯一導致分頁出現重複數據.

修改之後的 SQL添加了保證唯一的user_id
select * from tb_login_info order by login_time, user_id limit 5 offset 0;
select * from tb_login_info order by login_time, user_id limit 5 offset 5;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章