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

时间:2016-11-21 22:42:56

标签: mysql ruby-on-rails postgresql sorting activerecord

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

比方说,例如,用户has_many标题和标题has_many用户。他们的关系在UserTitle表中。我如何编写一个范围(以便它可以与其他查询链接) 返回按"名称"排序的用户用户的第一个标题栏

<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查询时,我不确定如何处理它。

1 个答案:

答案 0 :(得分:0)

一种方式(很多)是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);

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

相关: