更新: 在以下问题中,我认为当您选择行时,MySQL创建一种行索引,然后LIMIT和OFFSET子句通过其数字切断此列表。问题是我使用错误的值或字段组合排序行具有几乎相同的值。已订购分页与MySQL
这里是我的错误,假设到多“智能”形式的MySQL ;-)
解决的办法是始终有一个更可靠的分拣场作为备用,如ID,像这样ORDER BY优先降序,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的”到“内华达山脉”?
这个问题,不是实际的顺序,但一些行从来没有达到!像“Vallnord Ordino-Arcalís”。当我更改OFFSET值时,它不会遍历所有行,并且它会重复某些行。
这是最基本的问题。但是当使用Symfony的“KnpPaginatorBundle(2.5.3)”时,这给我带来了问题。我认为是PHP代码的问题,但mysql查询给我这个意想不到的结果。
任何帮助或线索怎么回事?
谢谢!
您的问题太麻烦IMO给我一个答案,但我不明白范围“Grandvalira”到“Sierra Nevada”的意义是什么?在完整的按字母排序的列表中,这两个位置都不是第一个或最后一个。尝试简化您的问题,并且切中要害。 –