2012-11-05 50 views
0

我有一个DataMapper的宋级(通过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是零。

另一种方法当然是默认为-1,但由于一些限制,我宁愿避免这种可能。

+0

你用什么连接数据库? MySQL认为NULL值比其他任何值都小,它显示的顺序类似于“{10,7,6,null,null}”。 – ujifgc

+0

@ujifgc使用Postgres – AlexQueue

回答

2

您可以在ORDER BY子句中指定NULl的位置。检查这个Sorting Rows。我不知道在DataMapper的,但SQL会是这样

SELECT select_list FROM table_expression ORDER BY sort_expression DESC NULLS LAST