2012-03-14 50 views
0

我有以下場景:如何在MySQL/PHP中存儲和搜索數字間隔?

用戶將輸入每個產品的間隔和/或單個逗號分隔的數字代碼。

部分表例如:

name  | codes 
----------------------------------- 
Product 1 | 239,300-350 

Product 2 | 430-450,500,29 

Product 3 | 780,2 

例如,當代碼321的用戶搜索,它應該返回產品1

的行是否有這樣做的是搜索與單一的方式查詢?

+0

哦JEES,是什麼導致了這種設計決定? – DanRedux 2012-03-14 03:06:17

+0

用戶使用唯一的條形碼編號標記每個項目,無論是否有同一產品的10個不同的條形碼,並且他正在追蹤它在... excel文件中。 是啊,聽起來真的很瘋狂,並不能說服他重新(已經有很多物品)。 – 2012-03-14 03:56:28

回答

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)。

+0

從來沒有想過這種方法。非常感謝! – 2012-03-14 03:56:49

0

我有同樣的問題,但是當你在尋找項目的代碼範圍的第一個答案是不是helpful.Because = 239,那麼你不能difine該項目還包含300-350