Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按列中的零值排序_Ruby On Rails_Sql Order By - Fatal编程技术网

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]