【发布时间】:2012-02-05 13:34:30
【问题描述】:
我正在尝试构建一个简单的网站来比较一些人的最佳比赛时间,但是,我在使用 distinct 时遇到了很多困难,这似乎给我带来了一些意想不到的问题。 ..
我有两个数据库 - Result 和 Athlete(运动员有很多结果)
我正在尝试确定每位运动员参加特定赛事的最快时间,然后将它们按顺序排列。为了做到这一点,我需要创建一个唯一运动员姓名的列表,但它们也必须按时间增加的顺序排列(即更慢)。我目前正在使用:
<% @filtered_names = Result.where(:event_name => params[:justevent]).joins(:athlete).order('performance_time_hours ASC').order('performance_time_mins ASC').order('performance_time_secs ASC').order('performance_time_msecs ASC').select('distinct athlete_id') %>
这似乎奏效了,但是,我发现如果 results 数据库中的最后一个条目是所有运动员中最慢的,则该运动员最终会出现在我的名字列表的末尾,即使他们的其中一个以前的结果是有史以来最快的!
有人能告诉我distinct 是否以某种奇怪的方式工作以及我该如何解决这个问题?如果底部结果是最快的,那么脚本就可以完美地运行......
为了完整起见,我需要这些信息才能运行以下代码:
<% @filtered_names.each do |filtered_name| %>
<% @currentathleteperformance = Result.where(:event_name => params[:justevent]).where(:athlete_id => filtered_name.athlete_id).order('performance_time_hours ASC').order('performance_time_mins ASC').order('performance_time_secs ASC').order('performance_time_msecs ASC').first() %>
<% @currentathlete = Athlete.where(:id => filtered_name.athlete_id).first() %>
<td><%= @currentathleteperformance.performance_time_mins %>:<%= @currentathleteperformance.performance_time_secs %>:<%= @currentathleteperformance.performance_time_msecs %> </td>
<td><%= @currentathleteperformance.wind_speed %></td>
<td><%= @currentathleteperformance.athlete_name %></td>
<td><%= @currentathlete.gender %></td>
<td><%= @currentathlete.sec %></td>
<td><%= @currentathleteperformance.competition_name %></td>
<td><%= @currentathleteperformance.round %></td>
<td><%= @currentathleteperformance.position %></td>
<td><%= @currentathleteperformance.performance_date %></td>
<td><%= @currentathlete.coach_name %></td>
<% end %>
【问题讨论】:
-
一个运动员可以有多个performance_times吗?
-
是的,抱歉,我没有说清楚。如果我为每位运动员提供一次表演,则代码可以正常工作。当一名运动员有两个或更多结果时,问题就出现了
-
您尚未命名您的数据库系统。我的答案几乎适用于任何 RDBMS,但我使用 PostgreSQL 进行了测试。关于
time的链接也适用于 PostgreSQL。在 MySQL 和其他人中有一个timetype。
标签: sql ruby-on-rails ruby-on-rails-3 distinct