如何搜索逗号分隔值

imr*_*ran 2 mysql

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

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

OMG*_*ies 7

短期解决方案

使用FIND_IN_SET函数:

WHERE FIND_IN_SET('Queensland', csv_column)
Run Code Online (Sandbox Code Playgroud)

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

长期解决方案

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

事情

  • thing_id(主键)

澳大利亚国家

  • State_id(主键)
  • STATE_NAME

Things_to_Auz_States

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

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