gpt4 book ai didi

ruby-on-rails - rails : Order with nulls last

转载 作者:行者123 更新时间:2023-12-03 05:16:02 25 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我多次遇到一个问题,我想知道其他人是如何解决的:

我有某些记录,其中值是可选的,因此该列的某些记录具有值,而某些记录为空。

如果我在某些数据库上按该列排序,则空值首先排序,而在某些数据库上,空值最后排序。

例如,我有一些照片可能属于也可能不属于某个集合,即有些照片 collection_id=nil ,有些照片 collection_id=1 等。

如果我执行Photo.order('collection_id desc),那么在 SQLite 上我最后得到空值,但在 PostgreSQL 上我首先得到空值。

有没有一种好的、标准的 Rails 方法来处理这个问题并在任何数据库中获得一致的性能?

最佳答案

我不是 SQL 专家,但为什么不先按是否为 null 进行排序,然后再按您想要的排序方式进行排序。

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

如果您只使用 PostgreSQL,也可以这样做

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

如果您想要通用的东西(比如您在多个数据库中使用相同的查询,您可以使用 ( courtesy of @philT )

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

关于ruby-on-rails - rails : Order with nulls last,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5826210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com