Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sequel-为一对多和多对多模型关联排序数据集_Mysql_Ruby_Sequel - Fatal编程技术网

Mysql Sequel-为一对多和多对多模型关联排序数据集

Mysql Sequel-为一对多和多对多模型关联排序数据集,mysql,ruby,sequel,Mysql,Ruby,Sequel,关于使用sequel订购数据集,我有一个问题 我有“作业”、“用户”、“评论”等表格。用户可以申请任何工作,因此我这里有一个多对多关联,我还有一个“jobs\u Users”表。作业和注释表示一对多关联。我试图实现的是以下内容-我想从“作业”中检索行,按顺序排列: 应用的用户数 最先被评论最多的评论数 我使用sequel,到目前为止我正在玩显式查询,所以您能帮助我以原生sequel方式实现这种排序吗 简化数据库如下所示: create_table :users do primary_ke

关于使用sequel订购数据集,我有一个问题

我有“作业”、“用户”、“评论”等表格。用户可以申请任何工作,因此我这里有一个多对多关联,我还有一个“jobs\u Users”表。作业和注释表示一对多关联。我试图实现的是以下内容-我想从“作业”中检索行,按顺序排列:

应用的用户数

最先被评论最多的评论数

我使用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
你可以试试这个-

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