【问题标题】:How to search for a comma separated value如何搜索逗号分隔值
【发布时间】:2010-10-04 02:16:51
【问题描述】:

您好,我有一个字符串存储在我的数据库中,用逗号分隔 例如:(新南威尔士州、昆士兰州等) 知道我的问题是,当我尝试搜索昆士兰时,我无法得到结果,但当我尝试搜索新南威尔士时,我得到了记录。

但是当我尝试搜索女王等时,我想得到结果。 我是php新手,所以请帮忙...

【问题讨论】:

  • 您现有的查询是什么样的?您可能离正确答案不远了。

标签: mysql


【解决方案1】:

短期解决方案

使用FIND_IN_SET function

WHERE FIND_IN_SET('Queensland', csv_column)

...因为在两端使用带有通配符的 LIKE 是有风险的,这取决于匹配的数量/少(并且它还确保了表扫描)。 LIKE 在任一侧的通配符的性能与 REGEXP 相当——这意味着不好。

长期解决方案

不要存储逗号分隔的值——使用适当的多对多关系,涉及三个表:

事情

  • thing_id(主键)

澳大利亚国家

  • State_id(主键)
  • 州名

Things_to_Auz_States

  • thing_id(THINGS 表的主键、外键)
  • State_id(AUSTRALIAN_STATES 表的主键、外键)

您需要 JOIN 来从三个表中获取数据,但如果您想知道有多少与特定状态或两个特定状态相关联,那么它是合适的模型。

【讨论】:

    【解决方案2】:

    不是你真正要问的,而是为了完整:除非你改变你的方法,否则你会遇到很多麻烦。

    正确方法:

    TableOne
    --------
    ThingID
    
    
    TableTwo
    --------
    ThingID
    Province
    

    那么你的数据库查询就变成了:

    SELECT fields FROM TableOne WHERE ThingID IN 
        (SELECT ThingID from TableTwo WHERE Province = 'Queensland')
    

    当他们搜索“澳大利亚”时,您希望发生什么?回到西澳和南澳?

    【讨论】:

    • +1,不是问题的真正答案,而是最佳解决方案。
    【解决方案3】:

    通过使用REGEXP

    $result = mysql_query("SELECT * FROM table WHERE column REGEXP $your_search_string");
    

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多