【发布时间】:2013-12-12 07:33:14
【问题描述】:
我正在一个需要针对动态值获取记录的站点上工作。我的表结构是这样的:
Rule_price Rul_value
100 3 200 5 250 6
我的问题是,如果我得到的值在 100 到 200 之间,那么它应该获取 100(第一条记录,最小值),如果得到的值在 200 到 250 之间,那么它应该获取 200,依此类推。
该值将匹配Rule_price 值。如果不清楚问我。谢谢。
【问题讨论】:
我正在一个需要针对动态值获取记录的站点上工作。我的表结构是这样的:
Rule_price Rul_value
100 3 200 5 250 6
我的问题是,如果我得到的值在 100 到 200 之间,那么它应该获取 100(第一条记录,最小值),如果得到的值在 200 到 250 之间,那么它应该获取 200,依此类推。
该值将匹配Rule_price 值。如果不清楚问我。谢谢。
【问题讨论】:
解决方法是计算价格与所有价格之间的距离,对它们进行排序并选择最小的正距离。
像这样:
SELECT rul_value, (rule_price - $price) as distance FROM my_table WHERE (rule_price - $price) < 0 ORDER BY distance DESC LIMIT 1
注意:此查询使用filesort,这意味着如果此表中有很多行,它可能会很慢。
【讨论】:
上面的答案 (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
【讨论】: