如何在MySQL/PHP中存储和搜索数字间隔?
我有以下情况: 用户将为每个产品输入间隔和/或单个逗号分隔的数字代码 部分表格示例:如何在MySQL/PHP中存储和搜索数字间隔?,php,mysql,database,search,intervals,Php,Mysql,Database,Search,Intervals,我有以下情况: 用户将为每个产品输入间隔和/或单个逗号分隔的数字代码 部分表格示例: name | codes ----------------------------------- Product 1 | 239,300-350 Product 2 | 430-450,500,29 Product 3 | 780,2 例如,当用户搜索代码321时,它应该返回Product 1的行 有没有一种方法可以通过一个查询进行搜索?我建议用两个表进行搜索: products
name | codes
-----------------------------------
Product 1 | 239,300-350
Product 2 | 430-450,500,29
Product 3 | 780,2
例如,当用户搜索代码321时,它应该返回Product 1的行
有没有一种方法可以通过一个查询进行搜索?我建议用两个表进行搜索:
products:
- name
- id
code_ranges:
- product_id
- range_start
- range_end
然后,您可以通过使用连接获得所需(对于某些$input\u 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
选择product.id、product.name
来自产品
在products.id=code\u ranges.product\u id上加入代码\u范围
其中code\u ranges.range\u start=$input\u id
每个产品的code\u范围
表中可以有多行,以表示多个不同的范围(例如2-4,7-10
将有两行,一行的range\u start=2
和range\u end=4
,另一行的范围为7-10)
不属于范围的产品代码将被简单地视为起点和终点相同的范围(例如,
7
将是range\u start=7
和range\u end=7
)。我建议用两个表来代替:
products:
- name
- id
code_ranges:
- product_id
- range_start
- range_end
然后,您可以通过使用连接获得所需(对于某些$input\u 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
选择product.id、product.name
来自产品
在products.id=code\u ranges.product\u id上加入代码\u范围
其中code\u ranges.range\u start=$input\u id
每个产品的code\u范围
表中可以有多行,以表示多个不同的范围(例如2-4,7-10
将有两行,一行的range\u start=2
和range\u end=4
,另一行的范围为7-10)
不属于范围的产品代码将被视为起点和终点相同的范围(例如
7
将是range\u start=7
和range\u end=7
).我有同样的问题,但第一个答案没有帮助。因为当你寻找商品代码范围=239时,你无法定义该商品也包含300-350我有同样的问题,但第一个答案没有帮助。因为当你寻找商品代码范围=239时,你无法定义该商品也包含300-350,是什么导致了这一设计决策?用户用一个唯一的条形码编号标记每个项目,无论同一产品是否有10个不同的条形码,他都会在。。。excel文件。是的,听起来很疯狂,无法说服他重新标记(已经有很多物品了)。哦,天哪,是什么导致了这个设计决策?用户用一个唯一的条形码编号标记了每个物品,不管同一产品是否有10个不同的条形码,他都会在。。。excel文件。是的,听起来很疯狂,而且无法说服他重新标记(已经有很多物品了)。