【发布时间】:2012-06-17 09:25:21
【问题描述】:
您好,我有以下问题:
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")
本质上,它是根据结果表中的外键出现来计算和排序玩家记录,其中对于特定比赛,win 设置为 true。为了让您更好地了解结果表中的一些示例数据可能是...
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 数据库。
【问题讨论】:
标签: ruby-on-rails-3 performance