我有一个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)
但这结合了查询,使得我的结果集为nil。
另一种选择当然是将null评级默认为-1,但由于某些限制,我宁可避免这种情况。
答案 0 :(得分:2)
您可以在NULl
子句中指定ORDER BY
的位置。检查此Sorting Rows。我不确定datamapper但是sql会像这样
SELECT select_list FROM table_expression ORDER BY sort_expression DESC NULLS LAST