Mysql从表中选择最接近的匹配项

Mysql从表中选择最接近的匹配项,mysql,select,match,closest,Mysql,Select,Match,Closest,我有一张这样的桌子: ID|DATA 1 | ok 4 | ok2 5 | kk 6 | same ok 7 | k 9 | yeah 当我通过时,我想找到与我的id最接近的匹配项(向下四舍五入) id=8 我想选择原始7 | K 如何在mySql中做到这一点您可以使用此解决方案: SELECT id, data FROM tbl WHERE id <= 8 ORDER BY id DESC LIMIT 1 选择* 从桌子上 其中ID指定您使用的服务器端脚本。到目前为

我有一张这样的桌子:

ID|DATA
1 | ok
4 | ok2
5 | kk
6 | same ok
7 | k
9 | yeah
当我通过时,我想找到与我的id最接近的匹配项(向下四舍五入)

id=8

我想选择原始
7 | K


如何在mySql中做到这一点

您可以使用此解决方案:

SELECT   id, data
FROM     tbl
WHERE    id <= 8
ORDER BY id DESC
LIMIT 1
选择*
从桌子上

其中ID指定您使用的服务器端脚本。到目前为止你都试了些什么?听起来像是昂贵的解决方案,我想我需要一些方法来限制它。我不想让他选择所有的数字然后排序them@Babibu,请参阅我刚才提出的替代解决方案。它很可能会更快,而且与DBMS无关。在您的替代解决方案中,您正在保存排序(使用mySQL可能会以任何方式进行优化),但是您正在从数据库中选择所有IDbottom@Babibu,如果
id
列被索引或是主键,则速度将非常快。我刚刚测试了约500万行,它在几分之一秒内选择了该行。这两种解决方案都会很快,索引位于
id
SELECT b.id, b.data
FROM   (SELECT MAX(id) AS id FROM tbl WHERE id <= 8) a
JOIN   tbl b ON a.id = b.id
SELECT * 
 FROM table
 WHERE ID <= 8
 ORDER BY ID DESC
 LIMIT 1