Mysql 对每个包含关键字的单词进行类似SQL的查询

Mysql 对每个包含关键字的单词进行类似SQL的查询,mysql,Mysql,例如: 我有一个词来搜索数据。这个词是“阿雅” 这是我的问题: select nama_product from product where nama_product like %a% 它很好用。但是它显示了我不想被展示的记录。 结果是: 阿亚姆·巴卡尔 大靖阿雅 巴亚姆希尧 道恩巴亚姆 第一个和第二个结果是可以的。但是第三个也是最后一个,我不想被展示出来 因为我想展示的是“阿亚姆”而不是“阿亚姆” 我该怎么处理?我不知道它是不是复制品。因为我已经搜索了它,但没有找到。当你在它之前和之后插

例如: 我有一个词来搜索数据。这个词是“阿雅”

这是我的问题:

select nama_product from product where nama_product like %a%
它很好用。但是它显示了我不想被展示的记录。 结果是:

  • 阿亚姆·巴卡尔
  • 大靖阿雅
  • 巴亚姆希尧
  • 道恩巴亚姆
第一个和第二个结果是可以的。但是第三个也是最后一个,我不想被展示出来

因为我想展示的是“阿亚姆”而不是“阿亚姆”


我该怎么处理?我不知道它是不是复制品。因为我已经搜索了它,但没有找到。

当你在它之前和之后插入“%”时,表示关键字之前(之后)的所有字符,所以只需更改你想要的方式 例如,仅以“ayam”开头的关键字: 从nama_产品中选择nama_产品,如“ayam%”

另一个例子是以“ayam”结尾的关键字: 从nama_产品(如“%ayam”)所在的产品中选择nama_产品

看这里,我想你的答案是:


不幸的是,这是SQL的一个限制。一些SQL数据库具有高级文本搜索功能,例如正则表达式,它允许非常特定的文本结果

对于您的情况,您可能需要执行多个类似条件。例如:

select nama_product 
from product 
where 
    nama_product like 'ayam %'
    or nama_product like '% ayam %'
    or nama_product like '% ayam'
    or nama_product = 'ayam'

请注意,如果文本字段非常大或表很大,则依赖LIKE运算符的查询可能会变得非常慢。LIKE不能很好地扩展大型数据集。如果这是一个您认为将来会变得非常大的数据集,最好以一种不需要LIKE运算符的方式设计它。

如果您需要搜索没有任何前缀和sufix字符的单词“ayam”,最好使用正则表达式。
e、 g.,

SELECT namma_product FROM product WHERE namma_product REGEXP 'ayam'
试试这个。这将起作用

您可以使用它仅匹配整个单词:

select nama_product
  from product
 where nama_product regexp '(^| )ayam( |$)';
  • (^ |)
    表示单词必须是字符串的开头,或者前面必须有空格
  • ayam
    是我们要匹配的词
  • (|$)
    表示单词后面必须有空格,或者必须是字符串的结尾