[英]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.