更新: 在下面的问题中,我认为当你选择行时,MySQL 会创建一种行索引,然后 LIMIT 和 OFFSET 子句通过它的数字切断这个列表。问题是我使用错误的值或字段组合对行进行排序,因为它们具有几乎相同的值。
这是我的错误,假设 MySQL 有很多“智能”;-)
解决办法总是有一个更可靠的排序字段作为后备,就像ID一样,像这样ORDER BY priority DESC, id ASC
这是一个严格的 MySQL 问题。为什么似乎在 ORDER BY 之前应用了 LIMIT OFFSET 子句?或者我错过了什么?
下面是示例,首先我们选择一个按优先级字段排序的行列表:
SELECT d0_.name, d0_.id AS id_0, d0_.priority AS priority_1 FROM destination d0_ WHERE d0_.active = 1 ORDER BY d0_.priority DESC;
结果如下所示:
然后我想使用以下查询从该列表中选择前 10 行:
SELECT d0_.name, d0_.id AS id_0, d0_.priority AS priority_1 FROM destination d0_ WHERE d0_.active = 1 ORDER BY d0_.priority DESC LIMIT 10 OFFSET 10;
我得到了这个结果:
为什么列表没有从“Grandvalira”到“Sierra Nevada”?
这个问题不是实际顺序,而是某些行从未到达!比如“Vallnord Ordino-Arcalís”。当我更改 OFFSET 值时,它不会遍历所有行,并且它会重复一些行。
这是基本问题。但这在使用 Symfony 的“KnpPaginatorBundle (2.5.3)”时给我带来了问题。我认为是 php 代码的问题,但是 mysql 查询给了我这个意想不到的结果。
有什么帮助或线索吗?
谢谢!