2017-03-09 63 views
0

当我在搜索页面中搜索雪铁龙时,我得到了结果,但是如果我搜索blackn roll,我不会得到结果,因为它的写法像black'n roll在表格中。一些用户也可能想要搜索黑色卷,但不会得到结果。我该如何解决它?而且还喜欢V-HR行和speacial字符,例如“& /()。我想MySQL的忽略它们。在全文搜索中的撇号mysql

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against('citroen')"; 

回答

0

如果你知道字符(被替换的)已经然后,你可以使用MySQL的REPLACE功能与%替换它们,并执行LIKE比较,如:

create table test(value varchar(100)); 
insert into test values ('black''n roll'); 


SELECT value 
FROM test 
WHERE 'blackn roll' LIKE CONCAT('%', REPLACE(value, '''', '%'), '%'); 

您可以用您输入的字符串替换“blackn卷”,如果你需要更换不止一个性格比较使用嵌套REPLACE功能

+0

感谢您的回答。它是否返回两个结果呢?某些用户可能会搜索黑色卷轴,某些用户可能会搜索黑色卷轴。那么我能得到相同的结果吗? – codeigniter

+0

是的,它会返回两种情况下的结果。 –

0

反斜杠是MySQL的转义字符。您可以尝试以下内容...全文索引因字词终结符而变得有点怪异。

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against ('black\'n roll' IN BOOLEAN MODE);" 

如果这不起作用,那就试着单独查找单词。字长也是一个因素,小字(默认情况下小于4个字符)不会编入索引。

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against ('black' + 'roll' IN BOOLEAN MODE);"