复杂MySql连接-rails

复杂MySql连接-rails,mysql,ruby-on-rails,postgresql,join,activerecord,Mysql,Ruby On Rails,Postgresql,Join,Activerecord,因此,我有模型用户、提交和下载。一个用户可以有多个提交,一个提交可以有多个下载。下载跟踪IP地址等,并以时间序列数据的形式进行结构。问题是,我需要能够做一个查询,比如查找过去一周下载量最多的用户。我真的不知道从哪里开始,任何帮助都将不胜感激 表格的主要部分包括具有id的用户、具有用户id和id的提交以及具有提交id和id的下载 因此,基本上,我需要选择特定用户拥有的提交的所有下载,统计它们,然后对它们进行排序,以找到下载最多的用户。这真的是可能的,还是有效的?我是否应该在下载模型中添加一个say

因此,我有模型用户、提交和下载。一个用户可以有多个提交,一个提交可以有多个下载。下载跟踪IP地址等,并以时间序列数据的形式进行结构。问题是,我需要能够做一个查询,比如查找过去一周下载量最多的用户。我真的不知道从哪里开始,任何帮助都将不胜感激

表格的主要部分包括具有
id
的用户、具有
用户id
id
的提交以及具有
提交id
id
的下载

因此,基本上,我需要选择特定用户拥有的提交的所有下载,统计它们,然后对它们进行排序,以找到下载最多的用户。这真的是可能的,还是有效的?我是否应该在下载模型中添加一个say
owner\u id
,然后根据它进行查询


谢谢您的帮助。

我对Rails还比较陌生,但我认为您应该使用

has_many :downloads, :through => :submission

在您的用户模型上。然后我想你可以做一些类似于
User.downloads.count

的事情,我对Rails相当陌生,但我认为你应该使用

has_many :downloads, :through => :submission
在您的用户模型上。然后我想你可以做一些类似于
User.downloads.count的事情

Submission.joins(:user,:downloads).
group('submissions.id','downloads.submission_id').
order('count_all DESC').
limit(10).
count
你会明白的

您可能还想尝试其他连接,但这是一个简单的起点。

尝试:

Submission.joins(:user,:downloads).
group('submissions.id','downloads.submission_id').
order('count_all DESC').
limit(10).
count
你会明白的


您可能还想尝试其他连接,但这是一个简单的起点。

因此,我最终通过一个原始sql查询解决了这个问题,这就是我想到的:

SELECT 
    users.id, 
    COUNT(*) AS subdownload_count
FROM users
    INNER JOIN submissions ON users.id = submissions.creator_id
    INNER JOIN downloads ON submissions.id = downloads.submission_id
GROUP BY 
    users.id
ORDER BY
    subdownload_count DESC

在过去的一年中,我一直在使用nosql,所以我不完全了解rails中的连接,但我可能很快就会想出如何实现它。感谢所有发表评论的人

因此,我最终通过一个原始sql查询解决了这个问题,这就是我想到的:

SELECT 
    users.id, 
    COUNT(*) AS subdownload_count
FROM users
    INNER JOIN submissions ON users.id = submissions.creator_id
    INNER JOIN downloads ON submissions.id = downloads.submission_id
GROUP BY 
    users.id
ORDER BY
    subdownload_count DESC

在过去的一年中,我一直在使用nosql,所以我不完全了解rails中的连接,但我可能很快就会想出如何实现它。感谢所有发表评论的人

为什么不试试这个下载.all.group(:user\u id).order(“count(id)DESC”)

因此,您可以获得所有下载,按用户id对其进行分组,并统计该用户的所有下载,然后按描述进行排序

我想这就是你想要的


*顺便说一下,别忘了添加“用户id”列。

为什么不试试这个下载.all.group(:user\u id.order(“count(id)DESC”)

因此,您可以获得所有下载,按用户id对其进行分组,并统计该用户的所有下载,然后按描述进行排序

我想这就是你想要的


*顺便说一句,别忘了添加“用户id”列。

对不起,我没有50%的声誉,因此我无法对您的原始sql答案添加评论,但您可以尝试在rails查询中写入以下内容:

User.all.joins(:submission => :downloads).group(:user_id).order("count(user_id) DESC")
所以获取所有用户,按用户id加入提交表,并获取其下载关联表,然后按用户id分组…等等


试一试?

很抱歉,我没有50%的声誉,因此我无法对您的原始sql答案添加评论,但您可以尝试在rails查询中写入以下内容:

User.all.joins(:submission => :downloads).group(:user_id).order("count(user_id) DESC")
所以获取所有用户,按用户id加入提交表,并获取其下载关联表,然后按用户id分组…等等


试一试?

这可能有效,但我需要能够对所有用户进行排序,并找到下载次数最多的用户。我认为那样的分类效率不高。我想我已经找到了一个使用原始sql的解决方案,可能会在稍后发布。排序不是问题-您可以通过
count\u rails-magic
进行排序(很抱歉,我不记得rails将在那里放置什么)。不过,原始sql应该不会是一个问题,我猜它会更有效。这可能会奏效,只是我需要能够对所有用户进行排序,并找到下载次数最多的用户。我认为那样的分类效率不高。我想我已经找到了一个使用原始sql的解决方案,可能会在稍后发布。排序不是问题-您可以通过
count\u rails-magic
进行排序(很抱歉,我不记得rails将在那里放置什么)。不过,原始sql应该不会是一个问题,我猜它会更有效。但接下来您将编写sql:-PYeah我知道:(我将尝试找出如何使用active record将其应用到rails查询中,其他方面也一样。但接下来您将编写sql:-PYeah我知道:(我将尝试找出如何使用active record将其应用到rails查询中,其他方面也一样。如果我无法使用联接找到其他解决方案,这就是我计划要做的。我真的不想添加其他列,但我想我已经找到了一个暂时可行的解决方案。这就是我计划要做的如果我找不到使用连接的另一个解决方案。我真的不想添加另一列,但我想我已经找到了一个暂时可以使用的解决方案。嘿,这很有效!(大部分情况下)最终查询是:
User.all.joins(:submissions=>:downloads)。group(“users.id”).order(“count(users.id)DESC”)
知道我该如何与用户一起获取下载计数吗?在我的原始查询中,它返回say
568;199556;195
(用户id,计数)。顺便说一句,谢谢!我似乎已经通过在查询末尾添加
.count
找到了答案,它将用户id映射到了下载的#。这应该可以,谢谢!嘿,这很有效!(大部分情况下)最后的查询是:
user.all.joins(:submissions=>:downloads.group(“users.id”).order(“count(users.id)DESC”)
你知道我该如何与用户一起获取下载计数吗?在我的原始查询中,它返回say
568;199556;195
(user\u id,count)。顺便说一句,谢谢!我似乎已经通过将
.count
添加到查询的末尾,并将用户id映射到下载的#中找到了答案。这应该行得通,谢谢!