Ruby on rails 按列中的零值排序
我有一个列为Ruby on rails 按列中的零值排序,ruby-on-rails,sql-order-by,Ruby On Rails,Sql Order By,我有一个列为position的表,在某些情况下,对于某些记录集合,它可以是nil。我有默认的订单选项,比如 order('positions ASC') 如果对于我排序的某个集合(上面的示例),所有值在位置列中都有null,那么我将按什么顺序从db获取此集合? 我建议我按ID的顺序收集(1,2,3)。我说得对吗 添加#1:DB-Postgresql您可以这样做 猫: 这维护了秩序 根据Postgres,如果没有排序子句,则根据磁盘上的物理位置返回记录。对于排序字段上具有相等值的排序记录,它没有说
position
的表,在某些情况下,对于某些记录集合,它可以是nil
。我有默认的订单选项,比如
order('positions ASC')
如果对于我排序的某个集合(上面的示例),所有值在位置列中都有null
,那么我将按什么顺序从db获取此集合?
我建议我按ID的顺序收集(1,2,3
)。我说得对吗
添加#1:DB-Postgresql
您可以这样做
猫:
这维护了秩序 根据Postgres,如果没有排序子句,则根据磁盘上的物理位置返回记录。对于排序字段上具有相等值的排序记录,它没有说明任何内容。但是,它使用b-tree,并且与clasic db管理器一样,它必须返回存储在b-tree中的顺序。您必须预料到这些更改都是在数据库重组时发生的
最后,对于排序字段中具有相同值的记录的顺序没有任何保证
注意:使用Postgres,您可以在第一次或最后一次设置空值(在Referer链接中有详细说明)
在相关问题上,我同意@macek。这取决于您的数据库引擎。如果您不提供第二列进行排序,PostgreSQL数据库将以随机顺序返回集合(如果它从缓存中获取记录,则不完全正确,顺序可能类似,但不可靠)。如果位置
为空
或等于另一条记录的位置
@MarekLipka更新问题,则使用顺序('position ASC,id ASC')
按id排序
id| name | position
1 5 null
2 6 null
3 7 null
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]