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

标签 mysql sql sql-like

我正在寻找一种方法来搜索数据库中匹配/包含特定关键字的记录。现在这些关键字必须是自己的单词,而不是另一个单词的一部分。因此,如果关键字是“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/

相关文章:

mysql - 如何正确编写带有 WHERE 子句的 sql 查询?

mysql - 如何改进这个 SQL? (MySQL数据库)

PHP PDO MySQL 查询 LIKE -> 多个关键字

mysql LIKE 和正则表达式 VS RLIKE 和变音符号

mysql - 从交易表中选择年月日

php - SQL中的速率计算

mysql - 根据数据库中的关键字搜索 XML feed 的描述

php - 喜欢 phpacademy 的按钮

mysql - 如何使用 ORDER 和 LIMIT MySql 进行 Left JOIN

mysql - 从多个表中选择并放入临时表中