2013-08-27 46 views
0

好吧,所以我創建了一種在線購物服務,並且我有一個需要一個字段來匹配多個其他字段的數據庫。他們需要被存儲,以便他們可以被忽略並設置爲可能在以後查看。我知道設置逗號分隔字段通常是不明智的,但我無法找到更好的方式來跟蹤匹配,同時能夠將它們分類爲單獨的列。在mysql中匹配一個列值與多個值

例如,我有25種產品可以出售,並且有10個城市我想出售它們。有些可以運到5個城市,有些可以運到9個城市。現在,如果有人在某個特定城市搜索產品,那麼只有這些產品纔會顯示爲僅在該城市可供銷售的搜索結果?

有沒有人有沒有更好的方式做這個沒有逗號分隔字段?

回答

0

使用n:n表:

產品表

產品

ID |命名

城市表

城市

ID |命名

映射(超過兩列唯一約束,而不是單一的約束):

shipping_information

PRODUCT_ID | city_id

然後,您可以輕鬆選擇某個產品的所有可用城市,或選擇所有產品,並將其發運到某個城市。

產品4所有可用的城市:SELECT * FROM cities, shipping_info WHERE cities.id = shipping_info.city_id AND shipping_info.product_id = 4

所有可用的產品,爲城市3:SELECT * FROM products,shipping_info WHERE shipping_info.id = 3 AND shipping_info.product_id = products.id

1

我會使用約3-4表:

  1. products - 讓每個數據產品
  2. cities - 有相關城市的數據
  3. product_cities - 有產品和城市

如果產品可以被運送到5個城市之間的關係,這將有5行product_cities含有相同product_id和不同city_id

當一個人的搜索,碰到這樣的:

SELECT pr.* 
FROM cities AS c 
INNER JOIN product_cities AS pc 
ON c.id = pc.city_id 
INNER JOIN products AS pr 
ON pc.product_id = pr.id 
WHERE c.name LIKE 'New York' 
0
Two way to you will be match one column value with mutiple value using 'case statement' or in statement in where clause like: 

select (case when col1>col2 then col2 else 
      when col1>col4 then col4 else 
      col1 end) as colname, col5 from tablename  

or 

select * form tablename where col11 in (1,2,3) 
0

讓三個不同的表 - 一個爲你的產品,一個是你想賣他們在城市和一個用於描述每個產品都可以發送(id,product_id,city_id)。

從那裏,只需使用簡單的連接來選擇所選城市的可能產品。

+0

查看@ RobinCastlin的完整查詢答案。 – Shomz

相關問題