全文中的撇号搜索mysql

时间:2017-03-09 15:08:16

标签: mysql database full-text-search apostrophe

当我在搜索页面中搜索雪铁龙时,我得到了结果,但如果我搜索blackn roll,我就不会得到结果,因为它在表格中写得像黑色滚动一样。一些用户也可能想搜索blackn roll但是没有得到结果。我该如何解决?还有像v-hr这样的行和像"& /()这样的特殊字符。我希望mysql忽略它们。

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

2 个答案:

答案 0 :(得分: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 roll'使用输入字符串并使用嵌套的REPLACE函数,如果需要替换多个字符。

答案 1 :(得分: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);"