我想找到一种有效的方法,在数据库中查找与其得分相关的对象排名。我的朴素解决方案如下:
rank = 0
for q in Model.objects.all().order_by('score'):
if q.name == 'searching_for_this'
return rank
rank += 1
可以使用 order_by 来让数据库进行过滤:
Model.objects.all().order_by('score').filter(name='searching_for_this')
但是,在筛选之后似乎找不到 order_by 步骤的索引。
有更好的方法吗?(使用python / django和/或原始SQL。)
我接下来的想法是在插入时预先计算排名,但那看起来很混乱。
select score as retrieved_score where name='searching_for_this'
select count(*) where score <= retrieved_score
-> 排名