我有一个列position
的表,在某些情况下,对于某些记录集合可以是nil
。我有默认的订单选项,如
order('positions ASC')
id| name | position
1 5 null
2 6 null
3 7 null
如果对于我排序的某些集合(上面的示例),所有值都在null
位置column
,我将从db获取此集合的顺序?
我建议我按照id(1,2,3
)的顺序收集。我是对的吗?
增加#1:数据库 - Postgresql
答案 0 :(得分:2)
根据Postgres manual,如果没有排序子句,则根据磁盘上的物理位置返回记录。它对排序字段中具有相同值的排序记录没有任何说明。但是,它使用b-tree,并且像clasic数据库管理器一样,它必须返回存储在b-tree中的顺序。您必须期望对db重组进行每次更改。
最后,对排序字段中具有相同值的记录的顺序没有保证。
注意:使用Postgres,您可以在第一个或最后一个处创建NULL值(在referrer链接中详细说明)。
在this相关问题上,我同意@macek。
答案 1 :(得分:1)
你可以这样做。
猫:
id| name | position
1 5 null
2 6 null
3 7 not_null
nil = Cat.order("id ASC").where(position: nil) = [1, 2]
not_nil = Cat.order("id ASC").where("position is not null") = [3]
not_nil + nil = [3, 1, 2]
这保留了订单。