2010-10-07 4 views
1

J'ai une base de données avec des colonnes (nom d'utilisateur, points). Je fais un appel pour retourner certains champs de cette base de données à utiliser dans un programme. Je veux tirer:Rails - comment extraire des données triées de la base de données

  1. Les 10 utilisateurs avec le plus de points
  2. Les 5 utilisateurs ci-dessus/en dessous du nom d'utilisateur demandant le classement

Je peux tirer le top 10 assez facilement ...

top_users = UserPoints.find(
    :all, 
    :conditions => ['points > 0'], 
    :order => "points DESC", 
    :limit => 10) 

Tirer l'entrée spécifique pour le nom d'utilisateur demande est aussi facile avec find_by_username, mais comment pourrais-je déterminer où cet utilisateur est classé? Ensuite, comment allez-vous trouver les 5 utilisateurs ci-dessus et 5 utilisateurs ci-dessous l'utilisateur spécifique (en supposant que l'utilisateur ne figure pas dans le top 10)?

Merci!

-Mark

Répondre

1

font peut-être à l'aide de deux requêtes?

utilisateurs ci-dessus utilisateur actuel:
UserPoints.all(:conditions => ['points > ?', user.points], :limit => 5, :order => 'points asc')

utilisateurs ci-dessous utilisateur actuel:
UserPoints.all(:conditions => ['points < ?', user.points], :limit => 5, :order => 'points desc')

Peut-être il y a une façon de le faire en utilisant une seule requête, je ne suis pas un expert en SQL, mais devrait le résoudre pour vous.

+0

Pas besoin d'une seule requête pour le moment. Réponse géniale. JE VOUS REMERCIE! – Mark

Questions connexes