新手问题 不改数据库字段的情况下,自定义排序输出

cconev · August 30, 2012 · Last by hexawing replied at November 05, 2013 · 3609 hits

我在做一个 Slider 功能: ' ids = Configs.postids.split("|").collect { |id| id.to_i }' '@posts = Post.where(:_id.in => ids).limit(5)'

设置 postids 为: '4|2|1|3|7'

怎样保证最后数据显示还是按照 4|2|1|3|7 的顺序呢?

1 Floor has deleted

用 mysql 的话,可以用 field:

Post.where(...).order("field(id, #{ids})")

.order("field(post.id, #{ids.join(',')})")

#2 楼 @quakewang #3 楼 @diudiutang NoSQL 又是怎样的呢?

#4 楼 @cconev 刚看了下 mongo mappermongoid sort 貌似都没有这个功能

那就取出来再在内存中排序吧

要是循环传 ID 给 Cell 渲染,是会多次查询数据库很影响性能么?

#2 楼 @quakewang 这个办法貌似不适用于有 null 的…… 我想把 null 排最前,其余的倒序, 找了很久也没找到方法……

啊,终于找到了,备忘一下……

select
  products.*
from
  products inner join priorities
  on products.category = priorities.category
order by
  priorities.priority is null, -- this to put null values at the end, or use 'is not null' to put null at first
  priorities.priority,
  products.id                  -- or some other field

或者在 rails 里

.where(true).order("personal_messages.read_at is not null").order("personal_messages.id DESC")
#未读消息(阅读时间为null)在最前,其余以id倒序
You need to Sign in before reply, if you don't have an account, please Sign up first.