我正在一个网站上工作,我需要根据动态值获取记录。我的表结构是这样的:
Rule_price Rul_value
100 3 200 5 250 6
我的问题是,如果我得到100到200之间的值,那么它应该获取100(第一个记录,最小值),如果值在200到250之间,那么它应该获取200,依此类推。
该值将与Rule_price
值匹配。如果不清楚问我。感谢。
答案 0 :(得分:1)
解决方案是计算价格与所有价格之间的距离,对它们进行排序并选择最小的正距离。
像这样:
SELECT rul_value, (rule_price - $price) as distance FROM my_table WHERE (rule_price - $price) < 0 ORDER BY distance DESC LIMIT 1
注意:此查询使用filesort
,这意味着如果此表中有很多行,它可能会很慢。
答案 1 :(得分:0)
上面的答案(Yousaf)查询获取记录,但是当值等于字段值时它失败:如果查找值为200则获取记录为100.对于200,它必须获取200而不是100。所以我改变了查询一点点并且运作良好。以后可能会帮助某人。
SELECT rul_value, (rule_price - $price) as target
FROM my_table WHERE (rule_price - $price) <= 0 ORDER BY target DESC limit 1