首页 > 解决方案 > MySQL查询以匹配精确值或下一个较低值

问题描述

PHP 脚本返回一个值,该值必须在 MySQL 数据库中表的第一列中查找。

如果脚本返回的确切值出现在第一个表列中,则查询需要从该行的其他列中提取更多信息。

如果脚本值未出现在第一个表列中,则应从下一个最小值(如果存在)中提取相同的信息。

所以数据库的行看起来像这样,目标查找值在第一列:

18  0.3783  0.4438  0.5155  0.5614  0.6787
19  0.3687  0.4329  0.5034  0.5487  0.6652    
20  0.3598  0.4227  0.4921  0.5368  0.6524    
25  0.3233  0.3809  0.4451  0.4869  0.5974    
30  0.2960  0.3494  0.4093  0.4487  0.5541

如果返回的脚本值为25,则同一行中的其他五个其他值:

0.3233 0.3809 0.4451 0.4869 0.5974

...应该被提取。

但是,如果脚本值为24,则需要提取具有下一个最小值的行信息,这将是数据库第一列值的行信息,即20

0.3598 0.4227 0.4921 0.5368 0.6524

什么样的查询最适合这个?

标签: mysqlsqlsql-order-bywhere-clausesql-limit

解决方案


您可以过滤第一列等于或小于参数的行,order by该列中的降序值,并仅保留顶行,使用limit.

假设过滤列被调用id

select *
from mytable
where id <= ?
order by id desc
limit 1

问号代表查询的参数。


推荐阅读