Mysql中的数据顺序不正确

时间:2014-11-26 06:19:25

标签: mysql

这是我的数据库数据样本:

这两列都是 int

 tuanId ,tuanSort
'375579', '55'
'370576', '54'
'366222', '54'
 ...
'346268', '52'
'369608', '52'
'370587', '52'
'370775', '52'
 ...
'370225', '52'
'370588', '52'
'360758', '52'
'366390', '51'

我试试这些sqls:

SELECT * FROM `tuan`.`TuanItem` WHERE ... ORDER BY `tuanSort` DESC LIMIT 140,20;


SELECT * FROM `tuan`.`TuanItem` WHERE ... ORDER BY `tuanSort` DESC LIMIT 160,20;

我得到这些错误的数据,我想做一个分页,但第二页在第一页有一些相同的数据:

例如,第一张图片的第17行在2张图片中显示了两次

  

enter image description here   enter image description here

那么,排序值是否会导致这样的问题呢?或MySQL有这样的选择问题?

3 个答案:

答案 0 :(得分:2)

鉴于tuanSort不是唯一的,行为在规范范围内。

您正在观察一个查询将特定行返回为第157行。在另一个查询执行中,它作为第161行返回。

要获得更多确定性序列,请在ORDER BY子句中指定其他列,例如

ORDER BY tuanSort DESC, tuanId DESC

如果这一系列语句背后的意图是“分页”,则有更有效的方法,例如从前一页的“最后”行保存唯一的,有序的标识符。

如果tuanSort,tuanId元组是唯一的......

WHERE tuanSort <= :last_tuanSort
  AND ( tuanSort < :last_tuanSort OR tuanId < :last_tuanId )
  AND ... 
ORDER BY tuanSort DESC, tuanId DESC
LIMIT 20

如果您获取所有二十行,请从最后一行保存tuanSorttuanId。在下一个“页面”上,在查询谓词中提供这些保存的值。

但这是你没有问过的问题的答案。

答案 1 :(得分:0)

我认为您需要刷新数据库表。

试试这个:Go - &gt; TuanItem-&gt;点击操作 - &gt;通过&gt;更改表格顺序选择你的tuanid并设置为升序。

答案 2 :(得分:0)

我认为您的问题是,您在2次查询中获得相同的数据。

然后将limit 160,20更改为

SELECT * FROM `tuan`.`TuanItem` WHERE ... ORDER BY `tuanSort` DESC LIMIT 140,0;

SELECT * FROM `tuan`.`TuanItem` WHERE ... ORDER BY `tuanSort` DESC LIMIT 160,141;

0表示偏移量,表示数据从0开始,第二个查询从141开始,因此无法获得相同的值两次