mysql - ActiveRecord/PostgreSQL -- 按第一个关联值排序

标签 mysql ruby-on-rails postgresql sorting activerecord

我在构建按多对多关系中关联表的列进行排序的查询时遇到问题。

例如,一个用户 has_many Titles,一个标题 has_many Users。它们的关系位于 UserTitle 表中。我将如何编写一个范围(以便它可以与其他查询链接) 返回按用户第一个标题的“name”列排序的用户

<User id: 1, name: 'Bob'>
<User id: 2, name: 'Joe'>
<UserTitle id: 1, user_id: 1, title_id: 2>
<UserTitle id: 2, user_id: 2, title_id: 1>
<UserTitle id: 3, user_id: 2, title_id: 2>
<Title id: 1, name: 'A-Name'>
<Title id: 2, name: 'B-Name'>

如果这些是我的数据库中的 User 对象及其关联表,我希望排序查询首先返回 Joe,然后返回 Bob(因为 Joe 的第一个标题是带有 A 的标题,它在字母表中排在第一位)。使用 ruby​​ 逻辑这很容易,但是当涉及到使用 ActiveRecord 构建 SQL 查询时,我不知道如何处理它。

最佳答案

(多种方法中的)一种是CROSS JOIN LATERAL:

SELECT u.*
FROM   "User" u
CROSS  JOIN LATERAL (
   SELECT title_id
   FROM   "UserTitle"
   WHERE  user_id = u.user_id 
   ORDER  BY usertitle_id
   LIMIT  1
   )
JOIN  "Title" t USING (title_id);

最佳查询取决于您的要求和环境的未公开详细信息。

相关:

关于mysql - ActiveRecord/PostgreSQL -- 按第一个关联值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40730751/

相关文章:

postgresql - 客户端 Postgres 日志记录

java - MySQL x Java - 引发异常

php - 在文档的其他部分使用变量

mysql - 更新百分比变化的 SQL 语句

ruby-on-rails - 如何在 ruby​​ on rails 中创建用户定义的重定向?

postgresql - 为什么在 postgreSQL 中使用 case 和数组函数会出现语法错误?

mysql - 在 Ubuntu 14.04 上为 MySQL 设置 SSL 连接时出现问题

php - 选择查询中的MySQL计算差异

ruby-on-rails - Rails验证错误消息:每个字段仅显示一条错误消息

ruby-on-rails - Rails Assets :precompile strange behavior