0

我的项目模型上有 owns_count counter_cache。当我做

Items.order("owns_cache DESC")

,它返回我在其他结果之前为零的对象。如果我做

"owns_cache ASC"

, 它是正确的。

我应该做什么?

4

1 回答 1

2

NULL 的排序方式取决于底层数据库。

对于 PostgreSQL,你可以这样做:

Items.order("owns_cache DESC NULLS LAST")

对于 MySQL 和 SQLite:

Items.order("COALESCE(owns_cache, 0) DESC")

我认为 MySQL 在 DESC 排序的底部对 NULL 进行排序,所以你可能不需要任何特殊的东西。这种 COALESCE 方法也适用于 PostgreSQL,因此这将是一个可移植的解决方案,应该可以在任何地方为您提供一致的结果。

如果您希望在 ASC 排序的底部出现 NULL,则可以将 NULL 替换为0大于最大owns_cache数字的值。

于 2011-09-26T08:14:14.960 回答