如何搜索逗号分隔值

时间:2010-10-04 02:16:52

标签: mysql

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

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

3 个答案:

答案 0 :(得分:7)

短期解决方案

使用FIND_IN_SET function

WHERE FIND_IN_SET('Queensland', csv_column)

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

长期解决方案

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

观光

  • thing_id(主键)

澳大利亚国家

  • State_id(主键)
  • STATE_NAME

Things_to_Auz_States

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

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

答案 1 :(得分:3)

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

正确的方法:

TableOne
--------
ThingID


TableTwo
--------
ThingID
Province

然后您的数据库查询变为:

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

当他们搜索“澳大利亚”时你想要发生什么?回到西澳大利亚州和南澳大利亚州?

答案 2 :(得分:-2)

使用REGEXP

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