2017-03-09 64 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);"