Maison  >  Article  >  base de données  >  Comment récupérer les 5 chansons les plus écoutées à l'aide des associations ActiveRecord ?

Comment récupérer les 5 chansons les plus écoutées à l'aide des associations ActiveRecord ?

DDD
DDDoriginal
2024-11-27 14:23:12544parcourir

How to Retrieve the Top 5 Most Listened-to Songs Using ActiveRecord Associations?

Ordre des enregistrements ActiveRecord par nombre d'associations

Dans Rails 3, vous pouvez facilement accéder et manipuler les données des tables associées à l'aide du framework ActiveRecord. Considérez le scénario dans lequel vous souhaitez récupérer les 5 chansons les plus écoutées à partir d'un modèle nommé Song. Vous disposez d'un modèle distinct appelé Listen qui établit une relation un-à-plusieurs entre les chansons et les écoutes.

Pour obtenir le résultat souhaité, vous pouvez utiliser les associations has_many et appartiennent_to dans vos modèles. Une étendue nommée constitue un moyen pratique de définir des requêtes complexes et de les réutiliser dans l’ensemble de votre application. Voici comment l'implémenter :

class Song
  has_many :listens

  scope :top5,
    select("songs.id, OTHER_ATTRS_YOU_NEED, count(listens.id) AS listens_count").
    joins(:listens).
    group("songs.id").
    order("listens_count DESC").
    limit(5)
end

Dans ce code :

  • select spécifie les colonnes à récupérer et ajoute une colonne listenings_count calculée.
  • joins établit la relation entre Song et Listen.
  • le groupe regroupe les résultats par ID de chanson pour compter le nombre d'écoutes pour chacun song.
  • order classe les résultats par ordre décroissant de listenings_count.
  • limit restreint la sélection aux 5 chansons les plus écoutées.

Maintenant, vous pouvez utiliser la méthode top5 pour récupérer facilement les données souhaitées :

Song.top5 # top 5 most listened songs

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn