MySQL奇怪的排序行为

时间:2016-10-28 10:04:43

标签: mysql sql

在进行查询时,我在排序记录时得到了一些奇怪的结果。 记录有一个'顺序'列,但目前它们都设置为0。

当我将结果集限制为15时,一切都按预期进行。只有当我将限制设置为16时,记录顺序才会变得混乱......

我知道我可以使用额外的订单价值修复它,但我想知道为什么会发生这种情况......

LIMIT 15 LIMIT 15

LIMIT 16 LIMIT 16

2 个答案:

答案 0 :(得分:2)

没有问题。您很简单地了解到MySQL中的doctrine/annotations(以及一般的SQL)不是稳定。这意味着具有绑定值的键可以以任意顺序发生。因此,同一查询的两次不同运行可以产生不同的结果。

为什么SQL排序不稳定?原因很简单:SQL表和结果集代表无序集。没有可用的信息来创建稳定的排序。它在无序集上毫无意义。

修复?这很容易。只需添加您想要的密钥:

order by

答案 1 :(得分:1)

您的订单:

ORDER BY `order` ASC

...不确定,因为有关系。您应该添加一些额外的标准来撤消这些关系,例如一些唯一的密钥或主键:

ORDER BY `order` ASC, product_id