Mysql Sequel-为一对多和多对多模型关联排序数据集
关于使用sequel订购数据集,我有一个问题 我有“作业”、“用户”、“评论”等表格。用户可以申请任何工作,因此我这里有一个多对多关联,我还有一个“jobs\u Users”表。作业和注释表示一对多关联。我试图实现的是以下内容-我想从“作业”中检索行,按顺序排列: 应用的用户数 最先被评论最多的评论数 我使用sequel,到目前为止我正在玩显式查询,所以您能帮助我以原生sequel方式实现这种排序吗 简化数据库如下所示:Mysql Sequel-为一对多和多对多模型关联排序数据集,mysql,ruby,sequel,Mysql,Ruby,Sequel,关于使用sequel订购数据集,我有一个问题 我有“作业”、“用户”、“评论”等表格。用户可以申请任何工作,因此我这里有一个多对多关联,我还有一个“jobs\u Users”表。作业和注释表示一对多关联。我试图实现的是以下内容-我想从“作业”中检索行,按顺序排列: 应用的用户数 最先被评论最多的评论数 我使用sequel,到目前为止我正在玩显式查询,所以您能帮助我以原生sequel方式实现这种排序吗 简化数据库如下所示: create_table :users do primary_ke
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
你可以试试这个-
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;
假设用户只能应用一次,也许可以通过在jobs\u users表job\u id和user\u id上设置主键来限制这一点,您只需对job\u id进行分组和计数,就可以得到一个job的应用程序数 评论也是如此。对工作的评论最多的是:
DB[:comments].group_and_count(:job_id).order(:count.desc).all
现在,这两个都不会返回完整记录,但它们将为您提供您正在寻找的顶级工作ID
DB[:comments].group_and_count(:job_id).order(:count.desc).all