SQL搜索字符串,例如String字符串的子字符串组合

时间:2016-02-23 07:20:15

标签: php mysql sql

我有以下查询来获取类似于输入文本的医院名单。输入的文字为$address

SELECT address FROM hospital WHERE address LIKE '%$address%'

我的桌子上有医院“政府医学院科泽科德”

输入以下文字时结果成功

  

政府

     

政府医疗

     

政府医学院

     

政府医学院科泽科德

但输入以下文字时结果为空

  

科泽科德政府医学院

     

科泽科德医学院

如何替换我的查询?

我想搜索医院名称,这可能是搜索单词的子串(以任何顺序)的组合。

例如我想要

  

“QWERTY Hospital Kozhikode”

搜索时

  

“QWERTY Hospital Kozhikode”

     

“Kozhikode QWERTY医院”

     

“科泽科德医院QWERTY”

     

“QWERTY Kozhikode医院”

     

“Kozhikode医院QWERTY”

3 个答案:

答案 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 =”%?%“,它现在的行为就像你想要的那样:)