对于获取类似于输入文本的医院名称列表,我有以下查询。输入的文本是$address
SELECT address FROM hospital WHERE address LIKE '%$address%'
我的桌子上有医院“政府医学院科济科德”
结果是在输入以下文本时取得成功
政府 政府医疗 政府医学院 Kozhikode政府医学院
但输入以下文本时结果为空
Kozhikode政府医学院 Kozhikode医学院
如何替换我的查询?
我想搜索医院的名称,这很可能是组合子字符串(以任何顺序)的搜索词。
例如,我想要
QWERTY医院Kozhikode
搜索时
QWERTY医院Kozhikode 科济科德QWERTY医院 科济库德医院QWERTY QWERTY Kozhikode医院 Kozhikode QWERTY医院
发布于 2016-02-23 07:31:19
首先修剪任何空白处:
$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
发布于 2016-02-23 07:27:32
您可以将搜索查询拆分到空格上,然后编写如下查询:
任何一词:
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中的全文索引,这将允许您在文本中搜索一个或几个单词。https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
发布于 2016-02-23 07:28:10
here已经回答了这个问题。
只需在单词上循环并为每个单词添加一个"WHERE name=“%?%,它现在的行为就像您想要的那样:)
https://stackoverflow.com/questions/35571162
复制相似问题