0

次のプロパティを持つDataMapperクラスSong(PostgreSQL経由)があります。

property :rating, Float, :required => false

ユーザーは曲を評価できます。問題は、ユーザーが利用可能な曲を評価別に閲覧できるようにすることです。5曲あり、そのうち3曲が評価されているとすると、次のようになります。

Song.all(:order => [:rating.desc])

{null、null、10、7、6}などの順序で曲を取得します。これらのnull値を順序の一番下に配置して、結果が{10、7、6、null、null}のようになるようにする簡単な方法はありますか。

私は試した

Song.all(:rating.not => nil, :order => [rating.desc]) + song.all(:rating => nil)

しかし、これは私の結果セットがゼロになるようにクエリを組み合わせます。

もちろん、別の方法として、デフォルトでnull評価を-1のようなものにすることもできますが、いくつかの制限があるため、可能であればこれを避けたいと思います。

4

1 に答える 1

2

NULlinORDER BY句の位置を指定できます。このSorting Rowsを確認してください。データマッパーではわかりませんが、SQLは次のようになります

SELECT select_list FROM table_expression ORDER BY sort_expression DESC NULLS LAST

于 2012-11-22T06:37:09.787 に答える