我有以下场景:
用户将为每个产品输入一个间隔和/或单个逗号分隔的数字代码。
部分表格示例:
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_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
).
关于php - 你如何在 MySQL/PHP 中存储和搜索数字间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9695347/