【问题标题】:Ordering records by the presence of a record in join table根据连接表中存在的记录对记录进行排序
【发布时间】:2015-02-05 12:11:34
【问题描述】:

所以我有一个users 的表和一个departments 的表。这些是通过另一个表 department_users 连接的。

我正在根据部门显示用户网格,如果用户在部门中,则打勾。这是通过检查用户在department_users 表中是否有将他们加入部门的条目来完成的。

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

我熟悉对数据库列的值进行排序,但我不确定如何根据用户现有的连接记录进行排序。

编辑:

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

我真正想要的是

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

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

这可能吗?

【问题讨论】:

    标签: mysql ruby-on-rails join


    【解决方案1】:

    使用它根据部门对用户进行排序:

    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')")
    

    但记得要提到所有部门名称,不要漏掉任何一个,否则将无法正常工作。

    希望这会有所帮助。

    【讨论】:

    • 这不是我所需要的。这会将具有部门的所有用户置于顶部,但不会按所选部门对他们进行分组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多