Rails: Order with nulls last

后端 未结 10 1509
悲哀的现实
悲哀的现实 2020-11-30 19:12

In my Rails app I\'ve run into an issue a couple times that I\'d like to know how other people solve:

I have certain records where a value is optional, so some recor

10条回答
  •  时光说笑
    2020-11-30 19:42

    I'm no expert at SQL, but why not just sort by if something is null first then sort by how you wanted to sort it.

    Photo.order('collection_id IS NULL, collection_id DESC')  # Null's last
    Photo.order('collection_id IS NOT NULL, collection_id DESC') # Null's first
    

    If you are only using PostgreSQL, you can also do this

    Photo.order('collection_id DESC NULLS LAST')  #Null's Last
    Photo.order('collection_id DESC NULLS FIRST') #Null's First
    

    If you want something universal (like you're using the same query across several databases, you can use (courtesy of @philT)

    Photo.order('CASE WHEN collection_id IS NULL THEN 1 ELSE 0 END, collection_id')
    

提交回复
热议问题