1

ゲームのdjangoモデルレベルがあります。

class Level(models.Model):

key = models.CharField(max_length=100)
description = models.CharField(max_length=500)
requiredPoints = models.IntegerField()
badgeurl = models.CharField(max_length=100)
challenge = models.ForeignKey(Challenge)

指定された値よりも小さい pointsRequired 値で最高レベルを照会したいと考えています。

私が持っている場合:

レベル 1: 必須ポイント: 200 レベル 2: 必須ポイント: 800 レベル 3: 必須ポイント: 2000

たとえば、クエリ パラメーターとして 900 または 1999 を入力するとレベル 2 が返され、10000 を入力するとレベル 3 が返されます。

SQLでは次のようになります

select   pointsRequired,
abs(pointsRequired - parameter) as closest
from     the_table
order by closest
limit 1

任意のヒント?追加の Query-Setを使用する必要がありますか? どのように見えるでしょうか

4

1 に答える 1

2

あなたのSQLは正しくないと思います。パラメータが1999の場合、「レベル3」を返す必要があります。説明に基づいて、SQLは次のようになります。

SELECT pointsRequired FROM the_table WHERE pointsRequired < parameter ORDER BY pointsRequired DESC LIMIT 1;

またはジャンゴで:

try:
    Level.objects.filter(requiredPoints__lt=parameter).order_by('-requiredPoints')[0]
except IndexError: 
    # Do something
于 2012-07-12T16:48:31.907 に答える