订购MySQL

时间:2017-10-13 11:22:38

标签: mysql knppaginatorbundle

更新 在下面的问题中,我想当你选择行时,MySQL创建一种行索引,然后LIMIT和OFFSET子句按其数字切断该列表。问题是我使用错误的值或字段组合来排序行,因为它们具有几乎相同的值。

这是我的错误,假设MySQL有很多“情报”; - )

解决方案总是要有一个更可靠的排序字段作为后备,就像ID一样, ORDER BY priority DESC,id ASC

这是一个严格的MySQL问题。为什么在ORDER BY之前应用LIMIT OFFSET子句?或者我错过了什么?

以下是示例,首先我们选择一个名为priority的字段排序的行列表:

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;

结果如下:

enter image description here

然后我想使用以下查询从此列表中选择前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;

我得到了这个结果:

enter image description here

为什么名单不会从“Grandvalira”变为“Sierra nevada”?

这个问题,不是实际的顺序,但从来没有达到过一些行!比如“Vallnord Ordino-Arcalís”。当我更改OFFSET值时,它不会遍历所有行,并且它会重复某些行。

这是基本问题。但是当使用Symfony的“KnpPaginatorBundle(2.5.3)”时,这最终给了我一些问题。我认为这是一个PHP代码的问题,但是mysql查询给了我这个意想不到的结果。

有关最新情况的任何帮助或线索?

谢谢!

1 个答案:

答案 0 :(得分:1)

您没有得到您期望的结果,因为您的数据有许多行具有相同的优先级值。

当您在优先级上使用'order by'时,所有具有优先级的行都可以按任何顺序排列。无法保证具有相同优先级的排序。要解决这种关系,您可以在order by子句中添加其他字段。根据您的选择,您可以选择在“order by”子句中包含name或id字段。