2009-01-29 35 views
2

人們對如何搜索同一個術語有不同的看法。在Mysql中搜索相似的字符串

例如三谷,Trivalley,三谷(甚至可能是不正確的拼寫)

目前,搜索是這樣

SELECT * FROM `table` WHERE `SchoolDistrict` LIKE '%tri valley%'; 

做的是有一個簡單的辦法說「空間破折號或沒有空間「沒有寫出三個類似的陳述?

這似乎是它可以很容易做到:

SELECT * FROM `table` WHERE `SchoolDistrict` LIKE '%tri%valley%'; 

但這僅僅在進行初始輸入是「trivalley」或「三山谷」如果最初的輸入爲「trivalley」我沒有想法在哪裏放置的%(理論上,實際上,我這樣做,因爲我們只看十幾個不同的學區,但我期望解決更大的問題)

回答

3

你可以考慮使用SOUNDEX,或SOUNDS LIKE如果你有很多不正確的拼寫。如果你有很多行(或者甚至沒有),那麼將SOUNDEX的輸出存儲在附加列中可能是明智的。

我也建議 - 爲了準確性 - 引入一個單獨的表和一個權威的學區列表,並運行一個查詢來查找那些不在該列表中的查詢。

+0

「爲了準確性的考慮,我還建議引入一個帶有權威學區列表的單獨表格,並運行查詢以查找那些不在該列表中的單元格。」 這是90%的問題,我給他們一個文本框,而不是一個下拉輸入,現在數據庫被搞砸了 – 2009-01-29 14:32:10

1

MySQL有一個名爲Sounds like的函數。

link text

0

您發佈應該做的伎倆第二個語句:

SELECT * FROM 'table' WHERE 'SchoolDistrict' LIKE '%tri%valley%'; 

您通過搜索項的select語句之前,你應該做的是用%來代替所有字符和空格標誌。例如,

SearchTerm = SearchTerm.Replace(" ","%"); 
1

這裏的一個替代方法是重新搜索從搜索到選擇的問題,如果可能的話。不要讓用戶輸入自由形式的文本來選擇學區,如果您有一組學區會生成一個下拉列表(如果列表很大,例如縣,那麼按學區)就會生成一個下拉列表,並允許用戶選擇合適的一個。將其用於「搜索」和數據輸入以消除非規範條目。顯然這隻有在你枚舉所有條目時纔有效。

或者,您可以允許用戶選擇開始或包含類型搜索,並根據所選搜索類型簡單地生成適當的SQL('tri%'或'%tri%')。如果用戶瞭解搜索類型是以「開始」還是「包含」開頭,那麼他們可能會調整搜索字符串,直到獲得他們需要的結果。