在我的 Rails 应用程序中,我多次遇到一个问题,我想知道其他人是如何解决的:
我有某些记录,其中值是可选的,因此某些记录具有值,而某些记录对该列为空。
如果我在某些数据库上按该列排序,则空值首先排序,而在某些数据库上,空值最后排序。
例如,我有一些照片可能属于也可能不属于一个集合,即有一些照片collection_id=nil
和一些地方collection_id=1
etc.
If I do 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
如果您想要通用的东西(比如您在多个数据库中使用相同的查询,您可以使用 (由@philT 提供 https://stackoverflow.com/a/32265291/160917)
Photo.order('CASE WHEN collection_id IS NULL THEN 1 ELSE 0 END, collection_id')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)