繁体   English   中英

ORM-Django查询分组并加入自身

[英]ORM - Django query grouping and joining itself

我正在开发一个程序来跟踪您已经在dota2上玩过的人,但是我也毫不奇怪如何将该sql查询转换为django查询。

这些模型是:

class Match(models.Model):
    ...

class Account(models.Model):
    ...

class MatchPlayer(models.Model):
    match = models.ForeignKey(Match)
    player_account = models.ForeignKey(Account)
    ...

我要翻译的查询是这样的:

SELECT count(*), dmp1.player_account_id, dmp2.player_account_id 
FROM matchplayer dmp1
JOIN  matchplayer dmp2 on dmp1.match_id = dmp2.match_id
WHERE dmp1.player_account_id=<some account id>
GROUP BY 2, 3
ORDER BY 1 desc

是否可以将其转换为Django查询,或者我必须将其用作SQL?

假设您想知道与pk = 1的玩家对战的玩家:

queryset = Account.objects.filter(matchplayer__match__in=[m.pk for m in Match.objects.filter(matchplayer__player_account=1)]).exclude(pk=1).annotate(count=Count('matchplayer__match'))

您将获得所有匹配玩家的查询集,每个对象都包含一个新的属性“ count”,该属性对应于特定玩家针对我们的目标玩家pk = 1的游戏次数。 因此,您可以执行以下操作(假设Account对象具有“名称”字段):

[(p.name, p.count) for p in queryset]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM