在我的数据库中搜索匹配/包含某些WHOLE关键字的记录

时间:2014-07-01 15:05:19

标签: mysql sql sql-like

我正在寻找一种在我的数据库中搜索匹配/包含某个关键字的记录的方法。现在这些关键字必须是它自己的单词,而不是另一个单词的一部分。因此,如果关键字是" wich",我不希望它与沙子匹配记录" wich"在标题中。

我能想到这样做的唯一方法是使用LIKE,但我甚至无法让它工作:(

我尝试使用以下内容:

SELECT * FROM tbl_recipes WHERE title LIKE '%$term%'

但是匹配所有记录,其中$ term出现在标题中的任何位置,无论其是否是另一个单词的一部分。

所以我认为这可能有用

SELECT * FROM tbl_recipes WHERE title LIKE '% $term %'

但这永远不会返回任何记录。

任何人都可以看到我出错的地方吗?或者如果有一个更好,更合适的功能,除了LIKE,我应该使用?

非常感谢

2 个答案:

答案 0 :(得分:1)

如果我想找到'soup'列中包含单词title的行,而这些行不属于另一个单词,我可以执行以下操作:

SELECT r.*
  FROM tbl_recipies r
 WHERE r.title LIKE 'soup'           
    OR r.title LIKE 'soup %'
    OR r.title LIKE '% soup'
    OR r.title LIKE '% soup %'

检查匹配1)整个标题,2)作为标题中的第一个单词,3)作为标题中的最后一个单词,4)作为标题内的单词。

这假设"字"标题内的一个或多个空格分隔,而不是逗号,短划线或句点。

MySQL还有一个REGEXP函数,可以使用正则表达式执行匹配。你仍然需要做同样的检查。

另一种方法是使用FIND_IN_SET函数。要使用它,您可以用逗号替换所有空格字符。

SELECT r.*
  FROM tbl_recipes r
 WHERE FIND_IN_SET('soup',REPLACE(r.title,' ',','))

这种方法有助于用逗号替换空格以外的字符;通过将REPLACE表达式包装在其他REPLACE表达式中,我们还可以用逗号替换短划线,用逗号替换制表符等等。

答案 1 :(得分:0)

如果使用mysql,请使用此查询

SELECT * FROM tbl_recipes WHERE title like '% soup %'

contains不是mysql函数。