我正在寻找一种方法来搜索数据库中匹配/包含特定关键字的记录。现在这些关键字必须是自己的单词,而不是另一个单词的一部分。因此,如果关键字是“wich”,我不希望它匹配标题中带有 sand“wich”的记录。
我能想到的唯一方法是使用 LIKE,但我什至无法让它发挥作用。
我尝试使用以下内容:
SELECT * FROM tbl_recipes WHERE title LIKE '%$term%'
但它会匹配 $term 出现在标题中任何位置的所有记录,无论它是否是另一个单词的一部分。
所以我认为这可能有效
SELECT * FROM tbl_recipes WHERE title LIKE '% $term %'
但这永远不会返回任何记录。
谁能看出我哪里出错了?或者除了 LIKE 之外是否还有更好、更合适的函数我应该使用?
最佳答案
如果我想查找 title
列中包含单词 'soup'
的行,该单词不属于另一个单词,我可以这样做像这样的东西:
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 表达式中,将破折号替换为逗号,将制表符替换为逗号,等等。
关于mysql - 在我的数据库中搜索匹配/包含某些整个关键字的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24513571/