我正在寻找一种在我的数据库中搜索匹配/包含某个关键字的记录的方法。现在这些关键字必须是它自己的单词,而不是另一个单词的一部分。因此,如果关键字是" wich",我不希望它与沙子匹配记录" wich"在标题中。
我能想到这样做的唯一方法是使用LIKE,但我甚至无法让它工作:(
我尝试使用以下内容:
SELECT * FROM tbl_recipes WHERE title LIKE '%$term%'
但是匹配所有记录,其中$ term出现在标题中的任何位置,无论其是否是另一个单词的一部分。
所以我认为这可能有用
SELECT * FROM tbl_recipes WHERE title LIKE '% $term %'
但这永远不会返回任何记录。
任何人都可以看到我出错的地方吗?或者如果有一个更好,更合适的功能,除了LIKE,我应该使用?
非常感谢
答案 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
函数。