好的,所以我正在创建一种在线购物服务,我有一个数据库,需要一个字段来匹配多个其他字段。它们需要存储,以便可以忽略它们并将其设置为以后查看。我知道设置逗号分隔字段通常是不明智的,但我无法找到更好的方法来跟踪匹配,同时能够将它们分类到以后的单独列中。
例如,我有25种产品可以出售,有10个城市我想卖掉它们。有些可以运到5个城市,有些可以运到9个城市。现在,如果有人在某个特定城市搜索产品,那么只有那些产品才会显示为仅在该城市可供销售的搜索结果?
有人在没有逗号分隔字段的情况下有更好的方法吗?
答案 0 :(得分:1)
我会使用大约3-4张桌子:
products
- 拥有每种产品的数据cities
- 拥有相关城市的数据product_cities
- 产品与城市之间的关系如果产品可以发货到5个城市,则product_cities
中的5行会包含相同的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'
答案 1 :(得分:0)
使用n:n
表:
产品表
产品
id |名称
城市表
城市
id |名称
映射(对BOTH列的唯一约束,而不是单个约束):
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
答案 2 :(得分: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)
答案 3 :(得分:0)
制作三个不同的表格 - 一个用于您拥有的产品,一个用于您要销售的城市,另一个用于描述每个产品的发送位置(id,product_id,city_id)。
从那里,只需使用简单联接来仅选择所选城市的可能产品。