我有以下情况:
用户将为每个产品输入间隔和/或单个逗号分隔的数字代码。
部分表示例:
name | codes
-----------------------------------
Product 1 | 239,300-350
Product 2 | 430-450,500,29
Product 3 | 780,2
例如,当用户搜索代码321时,它应该返回Product 1的行。
有没有办法用单个查询进行搜索?
答案 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=2
和range_end=4
,另一个是7-10范围。)
不在范围内的产品代码只会被视为开头和结尾相同的范围(例如7
将是range_start=7
和range_end=7
)。
答案 1 :(得分:0)
我有同样的问题,但第一个答案没有帮助。因为当你寻找物品代码范围= 239时,你不能确定该物品还包含300-350