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

Php 将mysql中的一列值与多个值匹配,php,mysql,Php,Mysql,好的,我正在创建一种在线购物服务,我有一个数据库,它需要一个字段来匹配多个其他字段。它们需要被存储,以便可以被忽略并设置为可能供以后查看。我知道设置逗号分隔的字段通常是不明智的,但我想不出更好的方法来跟踪匹配项,同时能够在以后将它们分类到单独的列中 例如,我有25种产品要卖,还有10个城市要卖。有些可以运往5个城市,有些可以运往9个城市。现在,如果有人在某个特定城市搜索产品,那么如何只显示那些仅在该城市销售的产品作为搜索结果? 如果没有逗号分隔的字段,有没有更好的方法可以做到这一点?使用n:n表

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

例如,我有25种产品要卖,还有10个城市要卖。有些可以运往5个城市,有些可以运往9个城市。现在,如果有人在某个特定城市搜索产品,那么如何只显示那些仅在该城市销售的产品作为搜索结果?


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

使用
n:n
表格:

产品表

产品

id |名称

城市表

城市

id |名称

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

航运资讯

产品标识|城市标识

然后,您可以轻松地选择产品的所有可用城市,或选择装运到特定城市的所有产品

产品4的所有可用城市:
从城市中选择*,其中cities.id=shipping\u info.city\u id和shipping\u info.product\u id=4


城市3的所有可用产品:
从产品、配送信息中选择*,其中配送信息.id=3和配送信息.product\u id=products.id

我将使用大约3-4个表格:

  • 产品
    -具有每个产品的数据
  • 城市
    -拥有相关城市的数据
  • 产品与城市
    -产品与城市之间有关系
  • 如果一个产品可以运送到5个城市,那么它在
    product\u cities
    中会有5行,其中包含相同的
    product\u id
    和不同的
    city\u 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'
    

    制作三个不同的表格-一个用于您拥有的产品,一个用于您想要销售产品的城市,另一个用于描述每个产品可以发送到哪里(id、product\u id、city\u id)


    从这里开始,只需使用简单连接即可为所选城市选择可能的产品。

    有关完整查询,请参阅@RobinCastlin的答案。
    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)