所以我有一张用户
表和一张部门
表。它们通过另一个表 department_users
连接。
我正在显示一个用户与部门的网格,如果用户在一个部门中则打勾。这是通过检查用户在 department_users
表中是否有将他们加入部门的条目来完成的。
我现在想对记录进行排序,以便所有在部门 A 的人都在顶部,即网格的第一列是顶部的所有刻度,然后是底部的所有十字。
我熟悉对数据库列的值进行排序,但我不确定如何根据用户现有的连接记录进行排序。
编辑:
用户和部门之间的关系是多对多的。
我真正想要的是
User.all ORDER BY (user.departments.includes? 'Department A')
因此,如果用户在部门 A 中,则它位于所有其他用户之前。
这可能吗?
最佳答案
使用它根据部门对用户进行排序:
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')")
但记得要提到所有的部门名称,不要遗漏任何一个,否则将无法正常工作。
希望这对您有所帮助。
关于mysql - 根据连接表中记录的存在对记录进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28343654/