2012-07-12 56 views
1

我有一個遊戲的django模型級別。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:requiredPoints:200 級別2:requiredPoints:800 級別3:requiredPoints:2000

當我輸入例如900或1999作爲查詢參數,我想2級要返回,進入10000時,它應該是3級。

在SQL它看起來像

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

任何提示嗎?我必須使用extra Query-Set嗎?它看起來像

回答

2

我不認爲你的SQL是正確的。它應該返回「3級」如果該參數根據您的描述1999年的SQL可能是:

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

或者在Django:

try: 
    Level.objects.filter(requiredPoints__lt=parameter).order_by('-requiredPoints')[0] 
except IndexError: 
    # Do something