Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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
如何限制SQL中的FROM_Sql_Ruby On Rails_Activerecord - Fatal编程技术网

如何限制SQL中的FROM

如何限制SQL中的FROM,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,对不起,如果问题的标题没有任何意义,我还是一个初学者,我只是不知道如何解释它 下面是我当前的SQL查询,它运行良好 select teams.id as team_id, teams.team_name, players.type_name, sum(points) as points from teams inner join gameweeks on teams.id = gameweeks.team_id inner join gameweeks_players on gamew

对不起,如果问题的标题没有任何意义,我还是一个初学者,我只是不知道如何解释它

下面是我当前的SQL查询,它运行良好

select teams.id as team_id, teams.team_name, players.type_name, sum(points) as points
from teams 
inner join gameweeks on teams.id = gameweeks.team_id    
inner join gameweeks_players on gameweeks.id = gameweeks_players.gameweek_id
inner join players on gameweeks_players.player_id = players.id
inner join player_fixtures on players.id = player_fixtures.player_id AND player_fixtures.gw_number = gameweeks.number
group by teams.id, players.type_name
在rails中,我将此查询转换为

Team.joins(gameweeks: :players).
joins("inner join player_fixtures on players.id = player_fixtures.player_id AND player_fixtures.gw_number = gameweeks.number").
group("teams.id, players.type_name").
select("teams.id, teams.team_name, players.type_name as type, sum(points) as points")
在rails中,我有这两个模型

class League < ActiveRecord::Base
    belongs_to :user
    has_many :league_teams
    has_many :teams, :through => :league_teams
end

class Team < ActiveRecord::Base
    has_many :gameweeks
    has_many :league_teams
    has_many :leagues, :through => :league_teams
end
class-League:联盟球队
结束
类团队:联赛球队
结束
我想将我的查询修改为仅与联赛相关联的球队(我想以某种方式传递该联赛的ID)

我只是不知道如何做到这一点,我错过了知识谷歌它与正确的关键字


你能给我指一下正确的方向吗?

这本指南应该能给你指一下正确的方向:

我无法测试这是否有效,但您可以尝试以下方法:

League.Team.select("teams.id, teams.team_name, players.type_name as type, sum(points) AS points")
           .joins(gameweeks: :players)
           .joins("INNER JOIN player_fixtures ON players.id = player_fixtures.player_id AND player_fixtures.gw_number = gameweeks.number")
           .where("league.id = ?", leagueId)
           .group("teams.id, players.type_name")


编辑:将问题评论中的@gregates答案与我的答案合并。

很确定你要找的只是
league.teams.joins(gameweeks::players)。连接(“内部连接玩家上的玩家固定装置。id=玩家固定装置。玩家固定装置。id和玩家固定装置。gw固定装置编号=游戏周。编号”)。组(“teams.id,players.type_name”)。选择(“teams.id,teams.team\u name,players.type\u name作为type,sum(points)作为points”)
@RobertHarvey这对我一点帮助都没有。在任何情况下,该页面都没有谈到通过一个联合表格为example@gregates你的回答也是正确的。谢谢你!有两个小的拼写错误(联盟而不是联盟),但这个答案非常有效@格雷盖茨在评论中的回答也起到了作用。我的回答实际上就是惯用的“rails”方式来做同样的事情。我相信您可以通过一些努力从查询中删除更多的原始sql,使其更加地道(我不是说它一定值得)。@gregates我同意您的建议有一种更好的方法来进行连接。我没有用rails编写任何代码,所以感谢您指出这一点!您的评论中没有任何where条件,这是需要的,所以我合并了解决方案并更新了答案。