【问题标题】:MySQL query to match exact value or next lower valueMySQL查询以匹配精确值或下一个较低值
【发布时间】:2021-02-19 15:32:25
【问题描述】:

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

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

【问题讨论】:

  • 在一个小而重要的技术点上,这看起来像一张桌子

标签: mysql sql sql-order-by where-clause sql-limit


【解决方案1】:

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

假设过滤列名为id

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

问号代表查询的参数。

【讨论】:

  • 我一直在想这个,我有这个完全相同的查询,但由于某种原因,我认为它有缺陷。但我不知道为什么这个问题被视为“虚伪”。
  • @nev:同意,我认为这个评论不公平。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2017-03-02
相关资源
最近更新 更多