【问题标题】:Represent Infinity in MySQL在 MySQL 中表示无穷大
【发布时间】:2011-04-20 13:06:35
【问题描述】:

我一直在构建一个跟踪作者版税的系统。假设作者的版税率是基于销售额:0 - 5000,他们会说,10%。 5001 - 10,000 他们得到 15%。我的问题是如何告诉 Rails 最终规则应该是 10,001 - 无穷大?现在,这在一个包含上下两列的royal_rules 表中表示,每个royal_rule belongs_to: contract 和每个contract :has_many royal_rules。

我在日期方面也有类似的问题...我在日期中输入了开始和结束时间,有时我不希望合同有结束日期。

【问题讨论】:

  • 我有点困惑:您是在问如何在代码中检查这样的范围,还是在问如何在数据库中存储这样的范围?如果是后者,您使用的是什么 RDBMS?
  • 我在询问是否将它们存储在数据库中...... MySQL
  • 如果您的范围是连续的,您只能存储较低的值。 0、5001、10,001。找出小于或等于销售额的最大“lower”值的规则。

标签: mysql ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

虽然 Ruby 没有 Infinity-Infinity 的常量,但它确实知道这些概念,您可以自己创建它们:

irb> Numeric::Infinity = 1.0/0
#=> Infinity

irb> range = 10001..Numeric::Infinity
#=> 10001..Infinity

irb> range.include?( 234234234234134134134 )
#=> true

编辑实际上,Ruby 1.9.2 似乎添加了Float::INFINITY,所以如果你处于领先地位,你可以使用它。 p>

【讨论】:

  • 你的意思是最前沿吗? :)
  • @KARASZI István:1.9.2 不是最前沿的;这是当前的稳定版本。
  • 我在评论 AFAIK 飞机上存在的“前沿”短语。
【解决方案2】:

这里是关于使用Infinity in Rails的小教程

【讨论】:

  • 我很高兴有人发布了这个。我不记得我在哪里看到的!
【解决方案3】:

我建议允许数据库中的上限列为 NULL。这将映射到 Rails 中的nil,并且很容易通过nil?nil 是“假”的事实进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2019-03-19
    • 2014-06-28
    • 1970-01-01
    相关资源
    最近更新 更多