2013-12-16 194 views
1

讓我們說,這是我的數據庫結構:mySQL查詢 - 找到點在哪裏?

id, group_name, points_needed; 

,這些都是樣品記錄:

1, "Newbie", 0, 
2, "Amatour", 100, 
3, "Expert", 500, 
4, "Pro", 100; 

不過,我不知道如何找到適合我目前的點組名。假設我有120個等級點。就像上面的例子一樣,我應該標記「Amatour」。但是,我怎樣才能在我的數據庫中找到這個標籤? ([B]的MySQL [/ B])。

我雖然使用WHERE並將其分組,但如果我尋找更大的價值,我會錯過「Amatour」記錄。如果我想尋找更小的價值,我會得到這個記錄,但這必須是動態查詢,所以如果我有100分,我會尋找更小的價值,我不會找到它。我對嗎?

回答

2
SELECT group_name 
FROM `YouDidn'tNameThisTable` 
WHERE points_needed <= ? 
ORDER BY points_needed DESC 
LIMIT 1 
+0

你好,我猜'points_needed <=?'是對的。例如有0分的人屬於新手組。 –

+0

@InoSHeo,謝謝,這是一個很好的觀點。我已經編輯了上述內容。 –

1

SELECT * FROM表,其中由points_needed限制1.

1

points_needed < = 120以便您可以只使用< =運算符和使用的限制運營商的選擇查詢限制到一個記錄。

從yourtable_name選擇組名,其中通過points_needed DESC極限1

+0

將yourtable_name替換爲您想要查找組名稱的點的表名和your_points。例如:假設您的表名稱是「ranktable」並且您有480個點,那麼查詢將是Select group_name from ranktable where points_needed <= 480 order by points_needed limit 1 – Dharsh

+0

編輯:您需要降序關鍵字DESC以確保記錄按降序排列,以找到符合您標準的正確排名:因此,查詢將是「Select group_name from ranktable where points_needed <= 480 order by points_needed desc limit 1「 – Dharsh

0

如果你想那麼最新記錄points_needed < = your_points順序:

SELECT group_name FROM <tableneme> WHERE points_needed <=120 
ORDER BY points_needed DESC LIMIT 1 

如果你想舊紀錄則:

SELECT group_name FROM <tableneme> WHERE points_needed <=120 
ORDER BY points_needed ASC LIMIT 1