2015-08-03 1 views
0

Désolé de ne pas pouvoir fournir tout mon code pour mon travail et j'utilise actuellement mon ordinateur personnel.django count distinct max

Je suis nouveau à django et ont besoin d'une aide pour résoudre ce

J'ai besoin pour obtenir le résultat du comptage distinct max

donc, je tables de contenu et Comment contenu a content_id et le titre Le commentaire a comment_id, comment, content_id (FK)

chaque fois que les utilisateurs commenteront le contenu table de commentaires va les enregistrer. par ex. Commentaire

comment_id comment content_id 
1    blah blah 1 
2    blah blah 1 
3    blah blah 2 
4    blah blah 3 

Je dois obtenir le titre du contenu qui a le plus grand nombre de commentaires dans. donc pour l'exemple ci-dessus, content_id 1 a le plus de commentaires car il a 2 commentaires. Je dois obtenir le titre de content_id 1 du contenu de la table.

dans SQL je peux utiliser quelque chose comme (pas exactement, mais juste pour vous donner l'idée de ce que je veux)

SELECT DISTINCT(content.content_id) AS no_of_comments, 
     title 
FROM content INNER JOIN comment 
ON content.content_id = comment.content_id 
GROUP BY content.content_id 
ORDER BY no_of_comments DESC 

je peux obtenir

no_of_comments title 
2     Title Of Content One 
1     Title Of Content Two 
1     Title Of Content Three 

alors je viens besoin de retourner 'Title Of Content One' à la suite de mon code

Je sais comment les obtenir à partir de SQL, à partir du code ci-dessus, mais je ne sais pas comment je peux le faire avec django

Je pense que je pourrais avoir besoin d'utiliser des choses de curseur dans django si elle a, mais comme j'ai commencé à joindre ces deux tables, je ne sais pas quoi faire. Et j'utilise django 1.6

Aidez-moi s'il vous plaît.

+0

https://docs.djangoproject.com/en/1.8/topics/db/aggregation/# generating-aggregates-for-each-item-in-a-queryset – Anentropic

+0

Thx, @Anentropic Cette page a beaucoup aidé, mais vous avez toujours une question. 'c = Comment.objects.values ​​('content_id'). annotate (count = Count ('conent_id')). order_by ('- count')' et ensuite 'c [0] .count' nombre maximum de comptes? si oui, alors comment puis-je obtenir le titre? ou au moins le content_id? –

+0

il serait plus logique d'interroger du point de vue du modèle de contenu: 'Content.objects.annotate (count = Count ('comment__id')). Order_by ('- count')' – Anentropic

Répondre

0

Je pense que vous pouvez obtenir ce que vous voulez avec cette requête:

Content.objects.annotate(count=Count('comment__id')).order_by('-count') 

il n'y a pas besoin pour le GROUP BY