我有关于续集订购数据集的问题。
我有'职位','用户','评论'表。用户可以申请任何工作,所以我在这里有一个多对多的关联(我也有一个'jobs_users'表)。工作和评论代表一对多的关联。我想要实现的是以下内容 - 我想从'作业'检索行,按以下顺序排序:
申请的用户数量;
评论数量(首先评论最多)。
我使用续集,到目前为止,我正在使用显式查询,所以你能帮助我以原生续集方式实现这样的排序吗?
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
答案 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_key
表jobs_users
和job_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
。