Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Postgresql 具有空值的自定义排序_Postgresql_Datamapper_Ruby Datamapper - Fatal编程技术网

Postgresql 具有空值的自定义排序

Postgresql 具有空值的自定义排序,postgresql,datamapper,ruby-datamapper,Postgresql,Datamapper,Ruby Datamapper,我有一个DataMapper类Song(通过PostgreSQL)具有以下属性: property :rating, Float, :required => false 用户可以给歌曲评分。 问题是,我希望用户通过分级来浏览可用歌曲。假设我有5首歌,其中3首已经被评级,然后是这样的: Song.all(:order => [:rating.desc]) 将按以下顺序为我提供歌曲:{null,null,10,7,6}或其他。有没有一种简单的方法可以将这些空值放到排序的底部,这样我的

我有一个DataMapper类Song(通过PostgreSQL)具有以下属性:

property :rating, Float, :required => false
用户可以给歌曲评分。 问题是,我希望用户通过分级来浏览可用歌曲。假设我有5首歌,其中3首已经被评级,然后是这样的:

Song.all(:order => [:rating.desc])
将按以下顺序为我提供歌曲:{null,null,10,7,6}或其他。有没有一种简单的方法可以将这些空值放到排序的底部,这样我的结果看起来像{10,7,6,null,null}

我试过了

Song.all(:rating.not => nil, :order => [rating.desc]) + song.all(:rating => nil)
但这会合并查询,因此我的resultset为nil


当然,另一种选择是将空评级默认为-1,但由于一些限制,如果可能的话,我宁愿避免这种情况。

您可以在
ORDER BY
子句中指定
null
的位置。看看这个。我不确定在datamapper中,但是sql将是这样的


选择“按排序从表中选择表达式顺序列表”\u expression DESC NULLS LAST

您正在连接的数据库是什么?MySQL认为空值比任何其他值都小,它显示的顺序类似于
{10,7,6,NULL,NULL}