如何根据在另一个表中找到(或未找到)的信息对结果进行分组?

时间:2011-01-27 15:55:37

标签: sql ruby-on-rails ruby-on-rails-3

很抱歉,如果这是一个简单的问题,我对我一直在使用的搜索字词运气不太好......

在我的rails 3项目中,我有模型Project,User和UserProjectRole。

用户有许多项目,以及UserProjectRole(包含user_id,project_id和角色)中定义的每个项目的角色。

有两个角色:编辑和领导。

如果我想对项目列表进行分组,那么current_user会看到他们首先列出的项目,他们可以编辑的项目排在第二位,以及最后没有列出任何角色的项目,我该怎么办?

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是一种方法:

select project, decode(sort, 1, 'LEAD', 2, 'EDITOR', 'Not Assigned') role
from (
select project, role, case when user_id = <current_user_id> and role = 'LEAD' then 1
                           when user_id = <current_user_id> and role = 'EDITOR' then 2
                           else 3 end sort
from UserProjectRole
) order by sort, project;

答案 1 :(得分:0)

也许将“order”选项传递给find?

User.projects.find(:all, :order => 'role_id')

或者,如果您想更具体地了解它们的显示方式,您可以将其分解为每种类型的3个单独的查找

User.projects.find(:all, :conditions { :role_id => 0 })

User.projects.find(:all, :conditions { :role_id => 1 })

User.projects.find(:all, :conditions { :role_id => 2 })