mysql搜索“s”结尾时应返回相同的结果,不带“s”结尾

mysql搜索“s”结尾时应返回相同的结果,不带“s”结尾,mysql,full-text-search,search-engine,Mysql,Full Text Search,Search Engine,我想在mysql中使用MATCH进行搜索 我有1个表包含名称和类别字段。类别字段包含book、books、books 我想要的是,当我在分类字段中搜索图书时,它应该给我3行 有人能帮我吗 谢谢 我需要澄清这个问题,其实我有一个网站,其中有搜索领域。当用户在上面输入内容时,我的网站应该在类别字段中搜索。真正的问题是,有时用户输入书籍,有时书籍,有时汽车,有时汽车。这些s字后的字让我头疼,我知道用户真正想要的是找到所有与书或车有关的,那么,我该怎么办,我应该去掉每个s字吗?还是有更好的解决办法 Ar

我想在mysql中使用MATCH进行搜索

我有1个表包含名称和类别字段。类别字段包含book、books、books

我想要的是,当我在分类字段中搜索图书时,它应该给我3行

有人能帮我吗

谢谢

我需要澄清这个问题,其实我有一个网站,其中有搜索领域。当用户在上面输入内容时,我的网站应该在类别字段中搜索。真正的问题是,有时用户输入书籍,有时书籍,有时汽车,有时汽车。这些s字后的字让我头疼,我知道用户真正想要的是找到所有与书或车有关的,那么,我该怎么办,我应该去掉每个s字吗?还是有更好的解决办法


Ari

将用户输入修剪到可接受的长度,然后尝试此查询

  $userInput = substr($input, 0, 4);

  select * from table where category like "%$userInput%"

例如,如果您是从PHP运行查询,您可以在那里准备查询,然后使用一个简单的正则表达式:

<?php

$term = 'book';

if(substr($term,-1) == 's') { //if term ends in an s
  $term = substr($term,0,-1); //the word without the s
}

//TODO: escape $term to prevent SQL injection

$query = "
  SELECT * FROM table
  WHERE category REGEXP '{$term}s?' // s? matches zero or one 's' character
";

使用MATCH进行搜索需要列类别上的全文索引,这可能有些过分

如果你真的想要这两个案子,你可以写

select * from table where
category = 'book' or category = 'books'
有了Oddant的答案,你可能还会得到类似“probookcover”之类的结果

如果您希望它不区分大小写,您有多个选项

select * from table where
lower(category) = 'book' or lower(category) = 'books'

或者你也可以这样做

select * from table where
category like 'book%'
这可以得到所有以book开头的列,但也可以得到“bookcover”

编辑:考虑您的评论:

就像我说的,火柴太过分了,所以我会这样做:

select * from table where
category = whatYourUserEnters OR category = substring(whatYourUserEnters, 1, length(whatYourUserEnters) - 1)

mysql不支持这样的功能,我认为最好将类别存储在单独的表中,然后构建1:N或N:M关系。oddant:我想我问错了问题。我需要澄清这个问题,其实我有一个网站,其中有搜索领域。当用户在上面输入内容时,我的网站应该在类别字段中搜索。真正的问题是,有时用户输入书,有时书,有时车,有时车,等等。这些字后的s字让我头疼,我知道用户真正想要的是找到所有与书或车相关的东西,所以,我应该怎么做,我应该去掉每个s字吗?或者有更好的解决方案吗?@ari实际上,请求读取在类别字段中找到单词“book”的表格中的select all COLUMN,而不管单词前后是什么,因此如果省略了s,请求返回的结果与s WRITTENMM相同。thx Naveen:我想我把这是个错误的问题。我需要澄清这个问题,其实我有一个网站,其中有搜索领域。当用户在上面输入内容时,我的网站应该在类别字段中搜索。真正的问题是,有时用户输入书,有时书,有时车,有时车,等等。这些字后的s字让我头疼,我知道用户真正想要的是找到所有与书或车相关的东西,所以,我应该怎么做,我应该去掉每个s字吗?或者有更好的解决方案吗?将用户字符串修剪为可接受的长度,然后基于该字符串thx naveen进行查询。我认为有更通用的方法来做这件事。我希望有一个功能可以自动知道,当用户搜索图书时,它也会返回图书,所以用其他词,比如电影、电影、汽车、汽车等等,tombom:我猜我问错了问题。我需要澄清这个问题,其实我有一个网站,其中有搜索领域。当用户在上面输入内容时,我的网站应该在类别字段中搜索。真正的问题是,有时用户输入书,有时书,有时车,有时车,等等。这些字后的s字让我头疼,我知道用户真正想要的是找到所有与书或车相关的东西,所以,我应该怎么做,我应该去掉每个s字吗?还是有更好的解决办法?泰克斯·奥丹特:我想我问错了。我需要澄清这个问题,其实我有一个网站,其中有搜索领域。当用户在上面输入内容时,我的网站应该在类别字段中搜索。真正的问题是,有时用户输入书籍,有时书籍,有时汽车,有时汽车等,甚至人们输入两个词,如汽车保险或汽车保险。这些s字后的字让我头疼,我知道用户真正想要的是找到所有与书或车有关的,那么,我该怎么办,我应该去掉每个s字吗?还是有更好的解决办法?
select * from table where
category like 'book%'
select * from table where
category = whatYourUserEnters OR category = substring(whatYourUserEnters, 1, length(whatYourUserEnters) - 1)