2014-06-30 81 views
1

我有一個自動完成搜索框使用Ajax和它的工作,因爲它應該但它沒有找到的東西效率。我希望能夠搜索某些內容並且不需要用逗號或冒號來實際返回正確的結果如何忽略SQL LIKE語句的非字母數字字符?

例如,如果我想終結者2:審判日,我搜索終結者2審判日,它不返回任何東西,因爲我離開了冒號:。我不希望發生這種情況。由於它的ajax自動完成其容易找到它,但我希望能夠找到的東西,而無需非字母數字字符

+0

你可能想看看全文搜索。 – colburton

回答

1

對於輸入terminator 2 judgement day,搜索所有單詞,而不是字符串:

title LIKE '%terminator%' AND title LIKE '%2%' AND title LIKE '%judgement%' AND title LIKE '%day%' 
+0

有沒有一種更有效的方式來說明非字母數字字符而不是空白字符串?我知道我可以使用phps爆炸函數來分割字符串在一個特定的字符,並從中創建一個數組,但是有沒有一種方法來確定一個字符串是否包含一個字符,並將其拆分到字符而不知道它是什麼preg_split()'有1-z或0-9 –

+1

'preg_split() – Marek

1

如果您使用字符串搜索使用like,那麼你可以做這樣的事情:

where replace(replace(replace(searchbox, ':', ''), ',', ''), '.') like 
      replace(replace(replace(title, ':', ''), ',', ''), '.')  

正如你所看到的,這很麻煩。您可以通過在數據庫中存儲標題的「可搜索」版本而不用標點符號,然後刪除用戶輸入的任何標點符號來簡化它。

或者 - 這可能是更好的解決方案 - 使用全文搜索,記錄在here。對於搜索框,這可能是你真正想要的。例如,它處理標點符號和部分匹配。