多对多字段找到记录

时间:2014-02-11 07:02:52

标签: django

我想查询数据库并获取数据库表中出现次数最多的id数据。

 story table                            

 id  story_name   
 1         this is one                   
 2         this is two



 story_story_table

 id  story_id   
 1     1                     
 2     1  
 3     1  
 4     2 
 5     3                               

现在id 1发生率最高。首先找到最高出现次数,然后根据此ID获取数据。使用django

1 个答案:

答案 0 :(得分:0)

使用内置API的django&#ORM,您可以找到最高的出现次数。

unique_fields = ['story_id','story_name_id']

duplicates = (Model.objects.values(*unique_fields)
                                 .annotate(max_id=models.Max('id'),
                                           count_id=models.Count('id'))
                                 .filter(count_id__gt=1)
                                 .order_by())

这将根据给定字段提供重复记录,并且最高出现时您只需使用len(duplicates)

<强>编辑:

highest_occured = (Model.objects.values(*unique_fields)
                                 .annotate(max_id=models.Max('id'),
                                           count_id=models.Count('id'))
                                 .filter(count_id=models.Max(count_id))
                                 .order_by())

我希望这会有所帮助。 :)