0

好的,所以我正在创建一种在线购物服务,并且我有一个需要一个字段来匹配多个其他字段的数据库。它们需要被存储,以便它们可以被忽略并设置为可能供以后查看。我知道设置逗号分隔的字段通常是不明智的,但我想不出更好的方法来跟踪匹配项,同时能够稍后将它们分类到单独的列中。

例如,我有 25 种产品要销售,并且有 10 个城市要销售它们。有些可以运到 5 个城市,有些可以运到 9 个城市。现在,如果有人在一个特定城市搜索产品,如何仅将这些产品显示为仅在该城市有售的搜索结果?

如果没有逗号分隔字段,有没有人有更好的方法来做到这一点?

4

4 回答 4

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'
于 2013-08-27T10:20:33.980 回答
0

使用n:n表格:

产品表

产品

编号 | 姓名

城市表

城市

编号 | 姓名

映射(对两个列的唯一约束,而不是单个约束):

运输信息

产品编号 | 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

于 2013-08-27T10:19:52.403 回答
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)
于 2013-08-27T10:20:40.267 回答
0

制作三张不同的表格 - 一张用于您拥有的产品,一张用于您要在其中销售它们的城市,一张用于描述每种产品的发送位置(id、product_id、city_id)。

从那里,只需使用简单的连接来仅选择所选城市的可能产品。

于 2013-08-27T10:20:44.580 回答