通过连接表中的记录来排序记录

时间:2015-02-05 12:11:34

标签: mysql ruby-on-rails join

所以我有一张users表和一张departments表。这些是通过另一个表department_users加入的。

我正在显示针对部门的用户网格,如果用户在某个部门,则会勾选。这是通过检查用户是否在department_users表中具有将其加入部门的条目来完成的。

我现在想要对记录进行排序,以便所有在A部门的人都在顶部,即网格的第一列是顶部的所有刻度,然后是底部的所有十字。

我熟悉数据库列的值的排序,但我不确定如何通过为用户存在的连接记录来订购。

编辑:

用户和部门之间的关系是多对多的。

我真正想要的是

User.all ORDER BY (user.departments.includes?  'Department A')

因此,如果用户在部门A中,那么它就在所有其他人之前。

这可能吗?

1 个答案:

答案 0 :(得分:0)

使用此命令根据部门订购用户:

User.joins(:departments).order("department_users.department_id")

这将生成查询:

SELECT `users`.* FROM `users` INNER JOIN `department_users` ON `department_users`.`department_id` = `users`.`id` INNER JOIN `departments` ON `departments`.`id` = `department_users`.`department_id` ORDER BY department_users.department_id

这将根据部门订购用户。请相应地更正关联名称/表名称。他们可能是错的。

编辑:

根据你的情况,你可以这样做:

User.joins(:departments).order("FIELD(department_users.department_id, field_names)")

例如:

User.joins(:departments).order("FIELD(department_users.department_id, 'Department A', 'Department B')")

但请记住提及所有部门名称不要错过任何部门名称,否则它将无法正常工作。

希望这有帮助。