2014-04-05 74 views
0

我有一个包含句子的列mytext表。MYSQL如何匹配句子中的两个单词

我想以任何顺序搜索含有“我的”“学校”这样的两个单词的句子。

什么,我想作为结果是

  1. 牛津是我校

  2. 我叫KK学校JES

+0

'SELECT * FROM mytable的WHERE mytext的REGEXP “学校|我的”;'可能会奏效。 –

+0

感谢喜的帮助 它返回的句子要么“学校”或“我的” 不能同时 – user2952880

回答

0

如果你使用InnoDB表(你可能是),你可以用这样的语句:

SELECT * FROM mytable WHERE mycolumn LIKE "%my%" OR mycolumn LIKE "%school%";

对于全文搜索更好的解决办法是使用专用搜索引擎,用于上述目的的优化 - 例如elasticsearch

+0

感谢查询是大约我想要的 – user2952880

0

你可以使用FULLTEXT搜索。

全文搜索基于FULLTEXT索引,这些索引可能仅为MyISAM表创建,并且仅适用于TEXT列和非BINARY CHAR和VARCHAR列。

FULLTEXT搜索不区分大小写。这是由于可能使用FULLTEXT索引的列类型的结果。

你的情况:

SELECT * FROM mytable的WHERE MATCH(mycolumn)反对( '我的学校');

+0

您好感谢 我尝试过,但它不会返回句子 “我的名字叫KK学校JES” – user2952880

1

查询:

SELECT * 
FROM mytable 
WHERE mycolumn LIKE "%my%" 
and mycolumn LIKE "%school%"; 

也将返回这样的句子:

  • “MySQL的学校”
  • “我的老校友的父母”

但我们不希望他们。

你可以试试这个:

SELECT * 
FROM mytable 
WHERE mycolumn regexp ' my |^my | my$' 
and mycolumn regexp ' school |^school | school$' 

但是,如果在列mycolumn你有这样的句子:

  • 我爱我的学校!

你应该考虑增加一个条件:

SELECT * 
FROM mytable 
WHERE mycolumn regexp ' my |^my | my$' 
and mycolumn regexp '[^a-zA-Z]school[^a-zA-Z]|^school | school$' 
+1

感谢您的正则表达式解决方案! – mariuszs80