您好我有一个以逗号分隔的数据库中存储的字符串 例如:(新南威尔士州,昆士兰州等) 知道我的问题是当我尝试搜索昆士兰时我无法得到结果,但当我尝试搜索新的南威尔士时,我得到了记录。
但我想在搜索女王等时得到结果。 我是php的新手,所以请帮忙...
答案 0 :(得分:7)
WHERE FIND_IN_SET('Queensland', csv_column)
...因为在两端使用带有通配符的LIKE是有风险的,这取决于匹配的数量/匹配程度(并且还确保了表扫描)。任何一方使用通配符的LIKE的性能与REGEXP相当 - 这意味着不好。
不存储逗号分隔值 - 使用适当的多对多关系,涉及三个表:
THINGS
表的外键)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");