+-------+
| 价值 |
+-------+
| 13.00 |
| 15.00 |
| 17.50 |
| 18.00 |
| 18.10 |
| 18.30 |
| 19.90 |
| 20.00 |
| 20.30 |
| 20.60 |
+-------+
SELECT * FROM `table` WHERE `value` = 19;
我想检索包含value
从 18.00 到 20.60(正负 2)的行
19 号我通过 POST 获得。
+-------+
| 价值 |
+-------+
| 13.00 |
| 15.00 |
| 17.50 |
| 18.00 |
| 18.10 |
| 18.30 |
| 19.90 |
| 20.00 |
| 20.30 |
| 20.60 |
+-------+
SELECT * FROM `table` WHERE `value` = 19;
我想检索包含value
从 18.00 到 20.60(正负 2)的行
19 号我通过 POST 获得。
您可以使用between
SELECT * FROM table
WHERE value between $posted_value - 2 and $posted_value + 2
如果您想要 +2 或 -2 的范围,最有效的方法是:
SELECT t.*
FROM `table` t
WHERE t.value >= 19 - 2.0
AND t.value <= 19 + 2.0
ORDER BY t.value
要从值“最接近”到 19 的七行中获取值列,请计算 19 与value
列中的值之间的差,取差的绝对值,然后按此排序。然后限制返回的行数:
SELECT s.value
FROM (
SELECT s.value
FROM `table` s
ORDER BY ABS(19.0-s.value)
LIMIT 7
) s
ORDER BY s.value
要获取整行,对于值“最接近”到 19 的行,您可以执行相同的查询,但也可以从行中检索唯一标识符,然后对原始表执行连接,例如:
SELECT t.*
FROM (
SELECT r.id
, r.value
, ABS(19.0-r.value) AS `absdiff`
FROM `table` r
ORDER BY ABS(19.0-r.value)
LIMIT 7
) s
JOIN `table` t
ON t.id = s.id