【问题标题】:Logic is not clear while fetching records from DB从数据库中获取记录时逻辑不清楚
【发布时间】:2013-12-12 07:33:14
【问题描述】:

我正在一个需要针对动态值获取记录的站点上工作。我的表结构是这样的:

Rule_price Rul_value

  100       3  
  200       5
  250       6

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

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

【问题讨论】:

    标签: php mysql sql logic


    【解决方案1】:

    解决方法是计算价格与所有价格之间的距离,对它们进行排序并选择最小的正距离。

    像这样:

    SELECT rul_value, (rule_price - $price) as distance FROM  my_table WHERE (rule_price -  $price) < 0 ORDER BY distance DESC LIMIT 1
    

    注意:此查询使用filesort,这意味着如果此表中有很多行,它可能会很慢。

    【讨论】:

    • 为什么要删除之前的查询?该查询有效,我稍作更改,我得到了我的解决方案。请发布以便我可以接受它..仅将 ASC 更改为 DESC
    • 不,前面的查询并非在所有情况下都有效。新的更好。
    • 我没有选择这个查询?为什么你使用 251
    • 但是您忘记在此查询中添加限制。
    【解决方案2】:

    上面的答案 (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 
    

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 2021-12-29
      • 2011-05-29
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 2021-06-13
      • 1970-01-01
      相关资源
      最近更新 更多