2009-12-16 173 views
1

我有一個用戶將從自己的輸入中搜索的短語數據庫。我希望他們能夠找到這個短語,而不管他們使用什麼標點符號。例如,如果短語「嘿,你好嗎?」我希望以下所有搜索都能返回:mySQL中對標點符號不敏感的搜索

  • 「嘿,你好嗎?!」 「
  • 」嘿,你好嗎?「
  • 「嘿:)你好嗎?」

現在,我有專欄'phrase'和'phrase_search'。短語搜索是一個簡短的短語版本,所以我們的例子將是'嘿,你好嗎'。

反正有沒有兩次存儲這個短語來實現這個?

謝謝!

-Nicky

回答

3

你所做的事可能是最省時的方法。是的,它需要雙倍的空間,但這是一個問題嗎?

如果一個問題,一個可能的解決辦法是將您的搜索字符串使用通配符(如:%Hey%how%are%you%),然後通過將相同的剝離功能的數據庫輸入濾波器在你的代碼的SQL結果搜索字符串並進行比較。這背後的基本原理是,與單詞之間的非標點符號相比,應該有相對較少的匹配,所以當您的PHP/Perl/Python /任何代碼可以執行操作時,仍然讓MySQL執行「繁重的工作」對相對較少的行進行更細粒度的檢查。

(這裏假設你一些代碼在調用這個,而不是在命令行中輸入過程的SQL查詢,用戶)

+0

好主意!當你說時間有效時,你的意思是搜索時間還是編碼時間? 我很好奇你認爲哪種方法在數據庫性能方面會更快。 – 2009-12-16 07:14:02

+0

好點 - 我的意思是搜索時間。編碼時間取決於數據如何更新,但我認爲,這種「後過濾」解決方案在這方面可能更好。 – EMP 2009-12-16 07:34:22