原因
有時候我們需要按照時間排序, 並配合 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;