2015-05-18 35 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