【问题标题】:database design numerical range数据库设计数值范围
【发布时间】:2014-05-20 10:19:49
【问题描述】:

我想设计一个包含数值范围的数据库

这个数据库是为生产年份设计的

大多数产品都有一个 [year] 的值,例如 2013

但其中一些包含数字范围 例如:1990 - 2010

我想按生产年份进行高级搜索

例如,用户可以搜索 2010 年至 2014 年生产的产品

但是,

我应该如何保存生产年份(正常或序列化)?

或者我应该有两列名称为 year1 , year2 ?

我不会设计这样的东西

注意:我必须用最有效的方式来设计它,因为很多用户都在使用这个搜索

【问题讨论】:

  • 两列开始年份和结束年份将是确保数据类型为日期的最佳方法
  • @Sam D 这样如何运行 sql 查询? SELECT * FROM table_name WHERE year1 and year2 BETWEEN 1994 and 2000 这将是错误的,例如,如果我的产品是在 1995 年到 1997 年间生产的,那它就不行了
  • 查询将更像:$startYear = 1994; $endYear = 2000;SELECT * FROM table_name WHERE year1 <= $endYear and year2 >= $startYear 这将捕获与 year1 和 year2 值完全重叠的所有可能行。
  • @JonathanKuhn 非常感谢 :)

标签: php mysql


【解决方案1】:

我认为最合适的选择是使用代表两个年份的两列(startYear/endYear)。 如果您只有一个值表示范围,则可以使用该值填充 startYear 和 endYear(假设 startYear

然后你可以使用这样的东西

`SELECT lala FROM lala WHERE startYear <= $num1 AND endyear >= $num2`

【讨论】:

  • 您的查询有误。您需要交换 $num1$num2 变量。查询应该是...WHERE startYear &lt;= $num2 AND endyear &gt;= $num1,否则您将无法匹配所有可能的时间重叠。
猜你喜欢
  • 2016-07-16
  • 2019-08-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
相关资源
最近更新 更多