Mysql中的数据顺序不正确

Mysql中的数据顺序不正确,mysql,Mysql,以下是我的数据库数据示例: 两列都是int 我尝试下面这些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

以下是我的数据库数据示例:

两列都是int

我尝试下面这些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行在两张图片中显示了两次


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

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


试试这个:Go->TuanItem->Click Operations->Alter table order by->选择您的tuanid并设置为升序。

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

然后将限值160,20更改为

0是偏移量,这意味着数据从0开始,第二个查询从141开始,因此您不能两次获得相同的值

鉴于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
如果您获取全部二十行,则从最后一行中保存tuanSort和tuanId。在下一页,在查询谓词中提供这些保存的值


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

tuanSort是char/varchar列吗?你能解释一下问题是什么吗?我看不见。你的桌子上有几行?你为什么要使用这样的偏移量?@Jens:我认为问题是有八行的Tuarsort值为'53'。在一个查询中,将返回其中的七行。在下一个查询中,将返回其中一行。但不能保证在第二次查询中返回的一个tuanSort='53'行不会是第一次查询返回的行,因为ORDER by子句只指定结果集按一个非唯一列排序。请在mysql phpmyadmin中执行这些操作。是,我试着把图安尼人当作升序,但原因是什么呢?当排序具有相同的值时,MySQL不会对结果进行排序?虽然这可能会影响观察到的结果集,但这并不保证任何特定查询返回行的顺序。要以特定的顺序返回结果集,我们需要在查询的ORDER BY子句中使用适当的表达式。我认为这根本不是问题所在。在MySQL LIMIT m中,n表示跳过前m行并返回下n行。no m是结果的限制,n是结果的第一次返回。你试过了吗?是的,我试过了。我要问你同样的问题:你试过了吗?我认为你对论点的顺序感到困惑。使用逗号而不是OFFSET关键字时,顺序不同。也就是说,极限m,n等于极限n偏移量m。有两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。非常感谢!当排序键不唯一时,mysql如何选择?结果排序了吗?如果它们被排序,为什么这两个select有一个重复的行?@MikeTang:只有order by子句中指定的表达式才能保证这些行的顺序。如果ORDERBY子句中的列组合不是唯一的,那么MySQL可以按其选择的任何顺序返回匹配值集中的行。。。无法保证这些行的返回顺序。
ORDER BY tuanSort DESC, tuanId DESC
WHERE tuanSort <= :last_tuanSort
  AND ( tuanSort < :last_tuanSort OR tuanId < :last_tuanId )
  AND ... 
ORDER BY tuanSort DESC, tuanId DESC
LIMIT 20