mysql - 根据连接表中记录的存在对记录进行排序

标签 mysql ruby-on-rails join

所以我有一张用户表和一张部门表。它们通过另一个表 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/

相关文章:

mysql - 在rails中按月分隔日期

java - Java/Scala 中的液体标记

SQL 查找重复条目(组内)

sql - 从同一列中的两行获取时间和超时

mysql - 两个表之间的联接复制一些结果

mysql - 将额外数据与 MySQL 列关联

mysql - MariaDB 帐户可以对数据库进行本地和远程访问吗?

php - 为数据库中的每个 ID 维护一个字符串队列

ruby-on-rails - Rails 3.1 .css.less 缓存错误

Mysql union/join 多列帮助