我有以下查询来获取类似于输入文本的医院名单。输入的文字为$address
SELECT address FROM hospital WHERE address LIKE '%$address%'
我的桌子上有医院“政府医学院科泽科德”
输入以下文字时结果成功
政府
政府医疗
政府医学院
政府医学院科泽科德
但输入以下文字时结果为空
科泽科德政府医学院
科泽科德医学院
如何替换我的查询?
我想搜索医院名称,这可能是搜索单词的子串(以任何顺序)的组合。
例如我想要
“QWERTY Hospital Kozhikode”
搜索时
“QWERTY Hospital Kozhikode”
“Kozhikode QWERTY医院”
“科泽科德医院QWERTY”
“QWERTY Kozhikode医院”
“Kozhikode医院QWERTY”
答案 0 :(得分:2)
首先修剪任何空格:
$address = trim($address);
然后只需在查询中使用REGEXP:
如果您想成为OR LIKE
,请使用以下内容:
SELECT address FROM hospital WHERE address REGEXP REPLACE('$address',' ','|')
这会将您的多字词字符串“转换”为OR LIKE '%%'
部分。
如果您想成为AND LIKE
,请使用以下内容:
SELECT address FROM hospital WHERE address REGEXP REPLACE('$address',' ','.+')
这会将您的多字词字符串“转换”为AND LIKE '%%'
部分。
有关REGEXP的更多信息,请访问:http://www.tutorialspoint.com/mysql/mysql-regexps.htm
答案 1 :(得分:0)
您可以在空格上拆分搜索查询,然后制作如下查询:
任何一句话:
SELECT address FROM hospital WHERE address LIKE '%QWERTY%' OR address LIKE '%Hospital%' OR address LIKE '%Kozhikode%'
所有单词:
SELECT address FROM hospital WHERE address LIKE '%QWERTY%' AND address LIKE '%Hospital%' AND address LIKE '%Kozhikode%'
虽然对于大型表来说效率不高。
否则我建议查看MySQL中的FULLTEXT索引,这样您就可以在文本中搜索一个或多个单词。 https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
答案 2 :(得分:0)
这个问题已经回答here。
只需循环你的单词并为每个单词添加“WHERE name =”%?%“,它现在的行为就像你想要的那样:)