MySQL Select查询返回错误的行

MySQL Select查询返回错误的行,mysql,Mysql,我想筛选表中的特定值。应始终显示下一个较低的值 +----+-----------+-------+------------+ | id | productid | lvl | value | +----+-----------+-------+------------+ | 2 | 7 | 10 | 100 | | 3 | 7 | 5 | 50 | | 6 | 7 | 1 |

我想筛选表中的特定值。应始终显示下一个较低的值

+----+-----------+-------+------------+
| id | productid | lvl   | value      |
+----+-----------+-------+------------+
|  2 | 7         | 10    | 100        |
|  3 | 7         | 5     | 50         |
|  6 | 7         | 1     | 25         |
+----+-----------+--
如果我搜索6级,应该会输出5级。如果我搜索14级,应该有10级输出

我尝试了以下查询,但没有一个能像我所希望的那样工作。例如,此查询适用于大于4的值。如果使用小于4的值,则需要将desc更改为asc以获得正确的结果:

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

使用sql查询返回下一个较低或相等行的正确方法是什么?

我认为您的查询没有问题。它工作得很好:


您正在做的是previous max,lvl的数据类型是什么?lvl的输出应该是什么?如果lvl字段是VARCHAR或CHAR数据类型,您需要将其转换为数字以进行排序,可能还需要进行比较。该字段是文本字段。我应该把它改成数字吗@peterm lvl@Alde的输出如果您有权这样做,并且没有理由认为您需要字段中的非数字数据,我强烈鼓励您这样做。整型数据类型速度更快,通常也更紧凑。请尝试使用lvl=10或lvl
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;