匹配一个列值与mysql中的多个值

时间:2013-08-27 10:14:26

标签: php mysql

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

例如,我有25种产品可以出售,有10个城市我想卖掉它们。有些可以运到5个城市,有些可以运到9个城市。现在,如果有人在某个特定城市搜索产品,那么只有那些产品才会显示为仅在该城市可供销售的搜索结果?

有人在没有逗号分隔字段的情况下有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

我会使用大约3-4张桌子:

  1. products - 拥有每种产品的数据
  2. cities - 拥有相关城市的数据
  3. product_cities - 产品与城市之间的关系
  4. 如果产品可以发货到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)。

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