3

我正在建立一个项目的画廊索引,其中一些项目有照片而其他项目没有。

我想获取所有项目(或带有 will_paginate 的子集)并首先按带有照片的项目(通过回形针附加)然后按记录创建日期对它们进行排序。

我需要第一部分的二进制“有附件”类型状态。我是否需要制作一些额外的模型属性并使用回形针的回调来设置二进制列的状态?或者,还有更好的方法?

我更喜欢在数据库级别进行这种排序,因为我们将使用 will_paginate 循环浏览记录块。

提前致谢

4

2 回答 2

3

您不需要创建额外的字段,而是使用 CONV 即时将文件名转换为布尔值(我假设您在 MySQL 上运行它 - 但在其他 RDBMS 上可以使用等效函数)。

ORDER BY CONV(photo_file_name,2,2) DESC, created_at

从技术上讲,CONV 是一个在不同基数之间转换数字的函数,但它接受字符串输入。如果 photo_file_name 列中存在值,它将返回 0,如果输入为 NULL,则返回 NULL。

MySQL 转换参考

于 2010-01-19T07:10:06.117 回答
2

因为我们在 dev 和 postgres 中起诉 SQLite(并且可能很快切换生产) CONV() 不可用。

我们在 ORDER BY 子句中进行比较以创建所需的二进制值。

ORDER BY (photo_file_name IS NULL) ASC, created_at DESC 

这似乎得到了我们所有数据库的支持并实现了预期目标。

于 2010-01-19T23:41:42.790 回答