【发布时间】:2010-10-04 02:16:51
【问题描述】:
您好,我有一个字符串存储在我的数据库中,用逗号分隔 例如:(新南威尔士州、昆士兰州等) 知道我的问题是,当我尝试搜索昆士兰时,我无法得到结果,但当我尝试搜索新南威尔士时,我得到了记录。
但是当我尝试搜索女王等时,我想得到结果。 我是php新手,所以请帮忙...
【问题讨论】:
-
您现有的查询是什么样的?您可能离正确答案不远了。
标签: mysql
您好,我有一个字符串存储在我的数据库中,用逗号分隔 例如:(新南威尔士州、昆士兰州等) 知道我的问题是,当我尝试搜索昆士兰时,我无法得到结果,但当我尝试搜索新南威尔士时,我得到了记录。
但是当我尝试搜索女王等时,我想得到结果。 我是php新手,所以请帮忙...
【问题讨论】:
标签: mysql
WHERE FIND_IN_SET('Queensland', csv_column)
...因为在两端使用带有通配符的 LIKE 是有风险的,这取决于匹配的数量/少(并且它还确保了表扫描)。 LIKE 在任一侧的通配符的性能与 REGEXP 相当——这意味着不好。
不要存储逗号分隔的值——使用适当的多对多关系,涉及三个表:
THINGS 表的主键、外键)AUSTRALIAN_STATES 表的主键、外键)您需要 JOIN 来从三个表中获取数据,但如果您想知道有多少与特定状态或两个特定状态相关联,那么它是合适的模型。
【讨论】:
不是你真正要问的,而是为了完整:除非你改变你的方法,否则你会遇到很多麻烦。
正确方法:
TableOne
--------
ThingID
TableTwo
--------
ThingID
Province
那么你的数据库查询就变成了:
SELECT fields FROM TableOne WHERE ThingID IN
(SELECT ThingID from TableTwo WHERE Province = 'Queensland')
当他们搜索“澳大利亚”时,您希望发生什么?回到西澳和南澳?
【讨论】:
通过使用REGEXP
$result = mysql_query("SELECT * FROM table WHERE column REGEXP $your_search_string");
【讨论】: