续集 - 为一对多和多对多模型关联订购数据集

时间:2012-06-17 13:13:19

标签: mysql ruby sequel

我有关于续集订购数据集的问题。

我有'职位''用户''评论'表。用户可以申请任何工作,所以我在这里有一个多对多的关联(我也有一个'jobs_users'表)。工作和评论代表一对多的关联。我想要实现的是以下内容 - 我想从'作业'检索行,按以下顺序排序:

  1. 申请的用户数量;

  2. 评论数量(首先评论最多)。

  3. 我使用续集,到目前为止,我正在使用显式查询,所以你能帮助我以原生续集方式实现这样的排序吗?

    Simplified db看起来像这样:

    create_table :users do
        primary_key     :id
        String          :nickname
    end
    
    create_table :jobs do
        primary_key     :id
        Text            :description
    end
    
    create_table :jobs_users do
        primary_key     :id
        foreign_key     :job_id
        foreign_key     :user_id
    end
    
    create_table :comments do
        primary_key     :id
        Text            :comment
        foreign_key     :user_id
        foreign_key     :job_id
    end
    

2 个答案:

答案 0 :(得分:0)

你可以试试这个 -

SELECT j.id,
       COUNT(ju.id) AS appliedcount,
       COUNT(c.id) AS commentcount
FROM jobs j
     JOIN jobs_user ju ON ju.job_id = j.id
     JOIN comments c ON c.job_id = j.id
GROUP BY j.id
ORDER BY appliedcount DESC, commentcount DESC;

答案 1 :(得分:0)

假设用户只能申请一次(可能通过在primary_keyjobs_usersjob_id上设置user_id来限制这一点,您可以获得一份工作的申请数量只需在job_id

周围进行分组和计数即可
DB[:jobs_users].group_and_count(:job_id).order(:count.desc).all

同样适用于评论。大多数关于工作的评论是:

DB[:comments].group_and_count(:job_id).order(:count.desc).all

现在这些都没有返回完整记录,但它们会为您提供您正在寻找的顶级job_id

相关问题