2012-03-14 42 views
0

我有以下场景:如何在MySQL/PHP中存储和搜索数字间隔?

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

部分表例如:

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

Product 2 | 430-450,500,29 

Product 3 | 780,2 

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

的行是否有这样做的是搜索与单一的方式查询?

+0

哦JEES,是什么导致了这种设计决定? – DanRedux 2012-03-14 03:06:17

+0

用户使用唯一的条形码编号标记每个项目,无论是否有同一产品的10个不同的条形码,并且他正在追踪它在... excel文件中。 是啊,听起来真的很疯狂,并不能说服他重新(已经有很多物品)。 – 2012-03-14 03:56:28

回答

4

我建议有两个表,而不是这样做:

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=2range_end=4,另一个具有7-10范围)。

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

+0

从来没有想过这种方法。非常感谢! – 2012-03-14 03:56:49

0

我有同样的问题,但是当你在寻找项目的代码范围的第一个答案是不是helpful.Because = 239,那么你不能difine该项目还包含300-350