0

+-------+
| 价值 |
+-------+
| 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 获得。

4

2 回答 2

2

您可以使用between

SELECT * FROM table 
WHERE value between $posted_value - 2 and $posted_value + 2
于 2013-07-08T18:13:15.440 回答
0

编辑

如果您想要 +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
于 2013-07-08T18:22:41.810 回答