我試圖構建位居演出在特定事件中的選擇運動員的網站上使用時,目前我的代碼存在問題。有不同的問題結合ORDER
我有2種型號 - Athlete
和Result
(運動員有很多結果)
每個運動員可以有許多的記錄時間爲一個特定的事件,我想找出最快的時間對每個運動員和排列這些最快時間跨越所有運動員。
我使用下面的代碼:
<% @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') %>
這成功地排列所有在所有運動員的成績爲事件(即一個運動員能出現一批依賴於他們所記錄的時間在不同的地方倍) 。
我現在想只拉出最好的結果對於每個運動員,包括他們的排名。我可以選擇的時間對應使用最好的結果:
<% @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() %>
不過,我的問題是當我試圖找出@filtered_names
列出的不同運動員的名字。我試着用<% @filtered_names = @filtered_names.select('distinct athlete_id') %>
但這並不表現如何我希望它和場合它得到的排名順序錯誤。
我發現,因爲它代表我的代碼基本上會尋找不同的運動員結果之間的差異,先從小時的時間,並通過以分鐘,秒和毫秒進展。一旦發現每個不同運動員的結果之間存在差異,就相應地命令他們。
例如,如果我有2名運動員:
Time for Athlete 1 = 0:0:10:5
Time for Athlete 2 = 0:0:10:3
這將產生順序,運動員2,Athlete1
然而,如果我有:
Time for Athlete 1 = 0:0:10:5
Time for Athlete 2 = 0:0:10:3
Time for Athlete 2 = 0:1:11:5
然後順序被給定爲運動員1,運動員2作爲第一個區別是在數字分鐘和運動員2是較慢...
任何人都可以提出一個方法來解決這個問題,基本上是走下來的條目@filtered_names
每名拉出它出現在第一時間(即保持名稱的順序,他們第一次出現在@filtered_names
感謝您的時間
布蘭登,非常感謝!使用1.9.2,只是頂部工作完美 – Texas 2012-02-06 06:05:12
任何想法如何在舊版Rails中做到這一點,我認爲我們的主機提供商可能安裝了1.9.0 ...?對不起... – Texas 2012-02-06 06:56:29
哇!我從來沒有真正看到過1.9.0,特別是Rails(如果你使用1.9,我相信Rails需要1.9.2+)。你可以在你的託管服務上運行'ruby -v'來確保?你可能必須實現你自己版本的'#uniq',但是它比原生C中的Ruby實現要慢,這比在數據庫中用SQL執行速度慢,所以要注意這一點。 – Brandan 2012-02-06 14:08:17