我想为表格过滤一个特定的值。应该始终显示下一个较低的值。

+----+-----------+-------+------------+
| 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查询返回下一个较低(或相等)行的正确方法是什么?

最佳答案

我认为您的查询没有问题。它工作正常:

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;

关于mysql - MySQL Select查询返回错误的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30308569/

10-09 07:37