2010-10-18 23 views
0

我有一個MySQL聲明,讓我整晚都想出來。我想知道,如果這個東西可以直接調用的轉換成漂亮的東西像Object.find(:條件)MySQL語句轉換爲漂亮的Rails AR語句?

ActiveRecord::Base.connection.execute(" 
    SELECT *, 
     (SELECT COUNT(*) 
     FROM scores AS temp2 
     WHERE temp2.score > scores.score 
     ORDER BY score DESC) + 1 AS rank 
    FROM scores 
    WHERE user_id=%s 
    ORDER BY score DESC" 
    % user_id).fetch_hash 

這種說法是對的Android遊戲內置高分網站的一部分。它獲得了最高的分數,並且有一個子查詢,它也是排名靠前的。

這可以做成更好的東西嗎?另外,這是否是最有效的方法呢?

感謝, 賈斯汀

+0

你能否更詳細地描述你想要做什麼,你的模式如何結合在一起的?很難對SQL進行反向工程,並且描述有點模糊。 – 2010-10-18 08:47:54

+0

他想知道有多少分數高於給定用戶的分數....我想 – Faisal 2010-10-18 08:50:39

回答

1

這應該爲你做它:

user = Score.find_by_user_id(id) 
rank = Score.count(:conditions => ['score > ?', user.score]) + 1 
+0

謝謝費薩爾,那是完美的。 – 2010-10-18 16:46:01