0

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

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

  1. 申请的用户数量;

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

我使用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
4

2 回答 2

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;
于 2012-06-17T17:17:51.403 回答
0

假设用户只能申请一次(也许通过primary_keyjobs_users桌子上制作来限制这一点job_iduser_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您正在寻找的 top 。

于 2012-06-18T13:19:16.467 回答