如何在MySQL / PHP中存储和搜索数字间隔?

时间:2012-03-14 03:04:46

标签: 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的行。

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

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:0)

我有同样的问题,但第一个答案没有帮助。因为当你寻找物品代码范围= 239时,你不能确定该物品还包含300-350