1

您好我有以下查询:

Player.select("Players.*, (SELECT COUNT(*) FROM Results WHERE Results.player_id = Players.id and win = true and competition_id = 4) as wins").where("competition_id = 4").order("wins desc")

本质上,它是根据结果表中的外键出现来计算和排序玩家记录,其中对于特定比赛,胜利设置为真。为了让您更好地了解结果表中的一些示例数据可能是...

Player_ID | Match_ID|Win|Elapsed_Time|etc..
1         |    1    |T  | 1:00       |etc..
2         |    1    |F  | 1:00       |etc..
1         |    2    |T  | 3:00       |etc..
3         |    2    |F  | 3:00       |etc..

如您所见,此语句中发生了两个选择,我认为这可能会在未来导致性能下降。玩家实际上与结果有一对多的关系,你可以猜到,但我无法弄清楚如何使用我认为可能更有效的连接来完成这项工作。

也许我错了,上述查询没有任何问题 - 无论哪种情况,请提供一些建议。

我正在使用 PostgreSQL 数据库。

4

1 回答 1

0

也许是这样的?

Player.joins(:results).where("results.win = true AND results.competition_id = 4").order("results.count DESC")
于 2012-06-16T15:35:09.023 回答