【发布时间】:2014-10-30 17:52:29
【问题描述】:
我正在使用 Python/Django,但我怀疑这必须在 mysql 级别上完成。
如果我有这样的模型:
class Article(models.Model):
title = models.CharField(max_length = 256)
rating = models.IntegerField(default=0)
我想查询评分最高的文章,但我想添加一个随机元素。我不只是希望他们所有人的评分都达到 100 分(满分 100 分)。
如果我在 python 中这样做,我会做类似的事情
articles = Article.objects.all()
#multiply each rating by a random multiplier and store that value in a tuple with the article
articles = [(random.random()*article.rating, article) for article in articles]
#sort by the calculated rating*random value
articles.sort(key=lambda tup: tup[0], reverse=True)
也许这是我能做的最好的了。但是,如果我要将其降低到查询级别,这就是我目前所拥有的一切:
articles = Article.objects.extra(select={"rand_rating":'( rating * {})'.format( random.random() )})
articles = articles.extra(order_by=['rand_rating'])
乍一看我认为这可能有效,但 random.random() 数字只是将所有内容乘以相同的常数,这基本上是无用的。我查看了 sql RAND() 但从我读过的内容来看,我会遇到同样的问题,因为不是为每一行调用 RAND(),而是每个查询只调用一次。
【问题讨论】:
标签: python sql django postgresql random