【问题标题】:Sequel - ordering a dataset for one-to-many and many-to-many model associationsSequel - 为一对多和多对多模型关联排序数据集
【发布时间】:2012-06-17 13:13:18
【问题描述】:

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

我有表 'jobs''users''cmets'。用户可以申请任何工作,所以我在这里有一个多对多的关联(我还有一个“jobs_users”表)。 Jobs 和 cmets 代表一对多的关联。我要实现的是以下内容 - 我想从 'jobs' 中检索行,按以下顺序排列:

  1. 申请的用户数;

  2. cmets 的数量(评论最多的在前)。

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

简化的数据库如下所示:

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

【问题讨论】:

    标签: mysql ruby sequel


    【解决方案1】:

    你可以试试这个-

    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;
    

    【讨论】:

      【解决方案2】:

      假设用户只能申请一次(也许通过在jobs_usersjob_iduser_id 上设置primary_key 来限制这一点,您可以通过简单地围绕@ 分组和计数来获得工作的申请数量987654325@

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

      cmets 也是如此。对工作的评论最多的是:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多