我想在mysql中使用MATCH进行搜索。
我有1个表包含“name”和“category”字段。 “类别”字段包含书籍,书籍,书籍。
我想要的是,当我在类别字段中搜索“book”或“books”时,它应该给我3行。
任何人都可以帮我这个吗?
感谢
我需要澄清这个问题,实际上我有一个有搜索字段的网站。当用户在其上输入内容时,我的网站应该在类别字段中搜索。真正的问题是,有时用户输入“书”,有时“书”,有时“车”,有时“车”。这个词后面的这个词让我很头疼,我知道用户真正想要的是找到所有与书或车相关的东西,那么,我该怎么办,我应该去掉每一个“s”字母?或者有更好的解决方案吗?
阿里
答案 0 :(得分:0)
select *
from table
where category LIKE '%book%'
答案 1 :(得分:0)
将用户输入修剪为可接受的长度并尝试此查询
$userInput = substr($input, 0, 4);
select * from table where category like "%$userInput%"
答案 2 :(得分:0)
例如,如果从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
";
答案 3 :(得分:0)
使用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' or category like 'books'
或者您也可以
select * from table where
category like 'book%'
它会为您提供以书籍开头的所有列,但您也可能会获得“bookcover”。
编辑:考虑您的评论:
就像我说的那样,match()是矫枉过正的,所以我会这样做:
select * from table where
category = whatYourUserEnters OR category = substring(whatYourUserEnters, 1, length(whatYourUserEnters) - 1)