我有以下场景:如何在MySQL/PHP中存储和搜索数字间隔?
用户将输入每个产品的间隔和/或单个逗号分隔的数字代码。
部分表例如:
name | codes
-----------------------------------
Product 1 | 239,300-350
Product 2 | 430-450,500,29
Product 3 | 780,2
例如,当代码321的用户搜索,它应该返回产品1
的行是否有这样做的是搜索与单一的方式查询?
我有以下场景:如何在MySQL/PHP中存储和搜索数字间隔?
用户将输入每个产品的间隔和/或单个逗号分隔的数字代码。
部分表例如:
name | codes
-----------------------------------
Product 1 | 239,300-350
Product 2 | 430-450,500,29
Product 3 | 780,2
例如,当代码321的用户搜索,它应该返回产品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
)。
从来没有想过这种方法。非常感谢! – 2012-03-14 03:56:49
我有同样的问题,但是当你在寻找项目的代码范围的第一个答案是不是helpful.Because = 239,那么你不能difine该项目还包含300-350
哦JEES,是什么导致了这种设计决定? – DanRedux 2012-03-14 03:06:17
用户使用唯一的条形码编号标记每个项目,无论是否有同一产品的10个不同的条形码,并且他正在追踪它在... excel文件中。 是啊,听起来真的很疯狂,并不能说服他重新(已经有很多物品)。 – 2012-03-14 03:56:28