从DB获取记录时,逻辑不明确

时间:2013-12-12 07:33:15

标签: php mysql sql logic

我正在一个网站上工作,我需要根据动态值获取记录。我的表结构是这样的:

  

Rule_price Rul_value

  100       3  
  200       5
  250       6

我的问题是,如果我得到100到200之间的值,那么它应该获取100(第一个记录,最小值),如果值在200到250之间,那么它应该获取200,依此类推。

该值将与Rule_price值匹配。如果不清楚问我。感谢。

2 个答案:

答案 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