Rails Rails 非 MySQL 字段排序问题

schwinn · 2015年07月10日 · 最后由 geniousli 回复于 2015年07月11日 · 1842 次阅读

环境:rails4 + mysql 缘由:想对文章列表 以 浏览量、关注量、答案数、答案的点赞数 这四个维度排序,根据权重每个问题会计算一个 hot 值,然而这个值一直变 存 mysql 太麻烦。 我用 Array sort 根据 hot 值排序出来文章 ids(缓存 2 个小时),然后转换到 ActiveRecord 用 where 匹配出来,但是 where 出来的 records 默认是 id 从小到大排序出来的,我不想 ids 原来的顺序打乱有什么好的方法嘛?或者其它实现方法?

是用 WHERE IN 查询的吗

mysql> SELECT * FROM animals WHERE id IN (9,3,6);
+----+------+
| id | name |
+----+------+
|  3 | laes |
|  6 | laxa |
|  9 | laxb |
+----+------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM animals WHERE id IN (9,3,6) ORDER BY FIELD(id, 9,3,6);
+----+------+
| id | name |
+----+------+
|  9 | laxb |
|  3 | laes |
|  6 | laxa |
+----+------+
3 rows in set (0.00 sec)

@FoGhost 谢谢!受教了,就是想要这个 .where(id:ids).order("FIELD(id, #{ids.join(',')})") 效果。

其实之前也遇到过这个问题。。。。。不过重点在于,终于碰上一个喜欢石兰妹纸的人了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号