2015-05-18 64 views
0

我想過濾我的表爲一個特定的值。應該總是顯示下一個較低的值。MySQL選擇查詢返回錯誤的行

+----+-----------+-------+------------+ 
| id | productid | lvl | value  | 
+----+-----------+-------+------------+ 
| 2 | 7   | 10 | 100  | 
| 3 | 7   | 5  | 50   | 
| 6 | 7   | 1  | 25   | 
+----+-----------+-- 

如果我搜索lvl 6,應該輸出5級。如果我搜索等級14,應該輸出lvl 10。

已經嘗試了以下查詢,但沒有一個按照我的要求工作。作爲例子此查詢過4.適用於價值如果我使用下4的值,我需要改變遞減到遞增,以獲得正確的結果:

SELECT * FROM `levels` where lvl <= '6' ORDER BY lvl desc limit 1 

請告訴我得到返回的正確方法下一個較低(或等於)與SQL查詢行?

+0

你在做什麼是以前最大的,什麼是拉特的數據類型? –

+1

lvl <= 4'應該輸出什麼? – peterm

+1

如果'lvl'字段是VARCHAR或CHAR數據類型,則需要將它CAST到數字以進行排序以及可能的比較。 – Uueerdo

回答

0

我沒有看到你的查詢錯誤。它工作正常:

http://sqlfiddle.com/#!9/e567f/1

SELECT * FROM `levels` where lvl <= 6 ORDER BY lvl desc limit 1; 

SELECT * FROM `levels` where lvl <= 14 ORDER BY lvl desc limit 1; 

SELECT * FROM `levels_char` where lvl <= '6' ORDER BY lvl desc limit 1; 

SELECT * FROM `levels_char` where lvl <= '14' ORDER BY lvl desc limit 1; 
+0

請用lvl = 10或lvl <= 11來嘗試 - 這應該返回lvl 10的行,但是返回lvl 5. – Alde

+0

你試過了嗎?我做了 - 一切都很好:http://sqlfiddle.com/#!9/e567f/7 – Alex