【问题标题】:How do you store and search number intervals in MySQL/PHP?你如何在 MySQL/PHP 中存储和搜索数字区间?
【发布时间】:2012-03-14 03:04:46
【问题描述】:

我有以下场景:

用户将为每个产品输入一个间隔和/或单个逗号分隔的数字代码。

部分表示例:

name        | codes
-----------------------------------
Product 1   | 239,300-350

Product 2   | 430-450,500,29

Product 3   | 780,2

例如当用户搜索代码321时,它应该返回产品1的行。

有没有办法通过单个查询进行搜索?

【问题讨论】:

  • 天哪,是什么导致了这个设计决策?
  • 用户用唯一的条形码编号标记每件商品,无论同一产品是否有 10 个不同的条形码,并且他在... excel 文件中跟踪它。是的,听起来真的很疯狂,并且无法说服他重新标记(已经有很多项目了)。

标签: php mysql database search intervals


【解决方案1】:

我建议用两张表来代替:

products:
 - name
 - id

code_ranges:
 - product_id
 - range_start
 - range_end

然后你可以通过使用连接得到你想要的(对于一些$input_id):

SELECT product.id, product.name
FROM products 
JOIN code_ranges ON products.id = code_ranges.product_id
WHERE code_ranges.range_start <= $input_id
    AND code_ranges.range_end >= $input_id

您可以在 code_ranges 表中为每个产品设置多行以表示多个不同的范围(例如,2-4,7-10 将有两行,其中一行包含 range_start=2 和 range_end=4,另一行用于 7-10 范围)。

不是范围的产品代码将被简单地视为开始和结束相同的范围(例如,7 将是 range_start=7 和 range_end=7)。

【讨论】:

    【解决方案2】:

    我有同样的问题,但第一个答案没有帮助。因为当您查找项目代码 range=239 时,您无法定义该项目也包含 300-350

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      相关资源
      最近更新 更多