【问题标题】:Rails, order by same-named column on two different tablesRails,按两个不同表上的同名列排序
【发布时间】:2018-08-17 20:49:16
【问题描述】:

我有一个模型 Leagues::FantasyPlayer,它有一个多态变量 player_entity,它是 Players::NflPlayer 或 Players::TeamPlayer。

我正在尝试加载联盟的梦幻球员,按“平均选秀位置”排序。 Players::NflPlayer 和 Players::TeamPlayer 两个表都有一个列“average_draft_position”。

这是我目前的尝试:

 fantasy_players = paginate Leagues::FantasyPlayer.includes(player_entity: :team).
      joins("LEFT JOIN players_nfl_players ON leagues_fantasy_players.player_entity_id = players_nfl_players.id AND leagues_fantasy_players.player_entity_type = 'Players::NflPlayer'").
      joins("LEFT JOIN players_team_players ON leagues_fantasy_players.player_entity_id = players_team_players.id AND leagues_fantasy_players.player_entity_type = 'Players::TeamPlayer'").
      where(available: true, conference_id: conference_id,league_id: league_id).
      order("players_nfl_players.average_draft_position, players_team_players.average_draft_position"), per_page: 15

问题在于,这首先返回按 average_draft_position 排序的 Players::NflPlayer 表,然后返回按 average_draft_position 排序的 Players::TeamPlayer 表 - 有什么方法可以让两个不同表的结果交错?

谢谢!!

【问题讨论】:

  • 嗨。 “交错”如何?我们知道有序列的投影是什么样子的——表中列的有序union——但是其余的是什么样的呢?也许你想要某些left joins 的联合?请阅读minimal reproducible example 并采取行动。这也是一个常见问题解答。请始终在谷歌上搜索您的问题/问题/目标的许多清晰、简洁和特定的版本/措辞,带和不带您的特定字符串/名称,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用一个变体搜索您的标题和关键字作为您的标签。

标签: sql ruby-on-rails join activerecord


【解决方案1】:

这应该可以解决问题。

.order('COALESCE(players_nfl_players.average_draft_position, players_team_players.average_draft_position) DESC')

【讨论】:

  • 谢谢!!这正是我想要的!
猜你喜欢
  • 2016-05-07
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 2013-11-02
  • 2015-09-01
相关资源
最近更新 更多