在进行查询时,我在排序记录时得到了一些奇怪的结果。 记录有一个'顺序'列,但目前它们都设置为0。
当我将结果集限制为15时,一切都按预期进行。只有当我将限制设置为16时,记录顺序才会变得混乱......
我知道我可以使用额外的订单价值修复它,但我想知道为什么会发生这种情况......
答案 0 :(得分:2)
没有问题。您很简单地了解到MySQL中的doctrine/annotations
(以及一般的SQL)不是稳定。这意味着具有绑定值的键可以以任意顺序发生。因此,同一查询的两次不同运行可以产生不同的结果。
为什么SQL排序不稳定?原因很简单:SQL表和结果集代表无序集。没有可用的信息来创建稳定的排序。它在无序集上毫无意义。
修复?这很容易。只需添加您想要的密钥:
order by
答案 1 :(得分:1)
您的订单:
ORDER BY `order` ASC
...不确定,因为有关系。您应该添加一些额外的标准来撤消这些关系,例如一些唯一的密钥或主键:
ORDER BY `order` ASC, product_id