按列中的零值排序

Order by nil value in column

我有 table 列 position,在某些情况下,对于某些记录集合可以是 nil。我有默认的订单选项,比如 order('positions ASC')

id| name | position
1    5       null
2    6       null
3    7       null

如果对于我排序的某个集合(上面的示例),所有值在位置 column 中都有 null,我将从 db 中以什么顺序获取这个集合? 我建议我将按 ID (1,2,3) 的顺序收集。我说得对吗?

添加 #1:DB - Postgresql

你可以这样做。

猫:

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]

这样可以保持秩序。

根据 Postgres manual,如果没有排序子句,记录将 return 根据磁盘上的物理位置进行排序。对于排序字段上具有相同值的排序记录,它什么也没说。但是,它使用 b-tree,并且像 clasic db managers 一样,它必须 return 存储在 b-tree 中的顺序。您必须预料到每个更改都会对数据库进行重组。

最后,不保证排序字段上具有相同值的记录的顺序。

注意:使用 Postgres,您可以在第一个或最后一个设置 NULL 值(在 referrer link 中有详细说明)。

相关问题上,我同意@macek。