Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 Rails活动记录中的Sql查询等价项_Mysql_Sql_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Mysql Rails活动记录中的Sql查询等价项

Mysql Rails活动记录中的Sql查询等价项,mysql,sql,ruby-on-rails,ruby,activerecord,Mysql,Sql,Ruby On Rails,Ruby,Activerecord,Rails noob在这里…我正在尝试在我的Rails项目中找到最好的选择。我有这样一个sql查询: 按countuser\u id>2的用户id从帐户组中选择countuser\u id为“count”的sumcount 它所要做的就是获取拥有2个以上帐户的用户总数。虽然这个sql查询本身运行良好,但我正在尝试找到一种方法将其转换为活动记录。用户和帐户是我项目中的rails模型。我假设用户与帐户有很多关系?在这种情况下,您可以执行以下操作 User.find(id).accounts.cou

Rails noob在这里…我正在尝试在我的Rails项目中找到最好的选择。我有这样一个sql查询:

按countuser\u id>2的用户id从帐户组中选择countuser\u id为“count”的sumcount


它所要做的就是获取拥有2个以上帐户的用户总数。虽然这个sql查询本身运行良好,但我正在尝试找到一种方法将其转换为活动记录。用户和帐户是我项目中的rails模型。

我假设用户与帐户有很多关系?在这种情况下,您可以执行以下操作

 User.find(id).accounts.count  
count = 0
@users = User.all 
@users.each do |user|
   if user.accounts.count >= 2
     count += 1
   end
end
每次具有特定id的用户拥有>=2个帐户时,您可以在总数中添加1个帐户

或者你可以做类似的事情

 User.find(id).accounts.count  
count = 0
@users = User.all 
@users.each do |user|
   if user.accounts.count >= 2
     count += 1
   end
end

希望这是您一直在寻找的东西。

蒂米的解决方案应该有效,但会导致。您可以使用.includes快速加载所需内容,以最小化对数据库的查询。我也假设您已经设置了您的has\u many,并且属于用户和帐户之间的关联。我相信这将是优化的实施:

users = User.includes(:accounts)
count = 0

users.each do |user|
  count += 1 if user.accounts.count > 2
end
我相信你甚至可以通过链接一个.where来进一步重构它,但我不太确定如何重构。检查顶部链接到的文档页面


希望对您有所帮助。

根据您提供的sql查询,Account model accounts表有一个名为user\u id的列,您正在使用该列进行分组。第一步是按用户id分组,并查找用户帐户计数。这将创建一个类似于{u1:n_acc1,u2:n_acc2}的散列。select语句选择所有键:值用户\u id:n\u帐户对,其中n\u帐户>2。然后,您只需要将n_值帐户映射到一个数组中,并对其应用求和


无需使用关联和/或即时加载。应该比其他解决方案更快。此外,发出一个db查询以查找分组计数,其余所有计算都将在ruby端进行。

尽管此解决方案看起来不错,但它会为每个用户多次查询db。我只想得到总和,我给出的sql查询比rails的方式更便宜。