iT邦幫忙

0

SQL 搜尋字元問題

想請問各位大大,目前我的狀況是 使用者新增資料後,由於有時候字會打錯

所以他們自己搜尋時就會搜尋不到,比方說: 他們新增地址輸入[臺南市],

但有些人新增時輸入[台南市],而我想要輸入臺南市的話,也會顯示台南市的資料,

台和臺兩個字都可以搜尋的到,想請問這樣辦得到嗎?

因為客服POST問題給我,問我行不行得通,我自己也是菜鳥也回答不上來。

謝謝各位

q00153 iT邦新手 4 級 ‧ 2018-06-22 10:34:28 檢舉
如果單純只有地址,建議搜尋之前取代一下就好啦~
建立一個簡單的轉換表,把台南都轉換成臺南,
如果要很厲害的做到 (像 Google 搜尋那樣)
那要去找一下同義詞、近義詞之類的轉換詞典,
不過那實在不好做,估計會超出人力與財力需求。
3
純真的人
iT邦研究生 3 級 ‧ 2018-06-22 09:49:30

因為兩個不同字的關係~
所以要多設幾個欄位~判斷特別字也列入條件搜尋~
就像Google搜尋~
我忘了把英文切回中文~
結果打出去搜尋~
回傳結果跟我當初想打的中文是依樣@@~

例如我打中央氣象局~他也一樣帶出來@@

5j/ u; fu4vu;4rm6
中央氣象局
https://www.google.com.tw/search?ei=u1QsW-2OO4qqoATHhabACw&q=5j%2F+u%3B+fu4vu%3B4rm6&oq=5j%2F+u%3B+fu4vu%3B4rm6&gs_l=psy-ab.3...163323.176314.0.178170.0.0.0.0.0.0.0.0..0.0....0...1c.1j4.64.psy-ab..0.0.0....0.KlzwSRQB5S0

3
kksugsay
iT邦新手 1 級 ‧ 2018-06-22 11:31:59

只就你說的部份,應該沒什麼困難的,
自己的作法會有一張同義詞的表,
要查詢前,先到表中把同義詞都取出,再去查詢,表的資料如下:

name, as_name, record_time
臺南市, 南市;台南;台南市, 2018/06/22 10:11:22 
4
小魚
iT邦研究生 1 級 ‧ 2018-06-22 11:58:07

區域這種東西我通常會建下拉選單,
像我 鐵人賽文章 裡面寫這樣...

另外想到一個,
以前有用過郵局的郵遞區號系統,
它可以讓你匯入Excel檔案,
然後會幫你分析,
只要能分析的都會改成固定格式的縣市和鄉鎮,
然後匯出新的Excel檔案,
不過你要有能力將Excel檔案匯進去改資料庫.

Homura iT邦新手 3 級 ‧ 2018-06-22 14:41:14 檢舉

我也覺得用下拉選單好
但是看他那樣做,應該是直接把地區寫入欄位裡...
如果這樣做他應該要改掉他的資料庫架構了

2
浩瀚星空
iT邦新手 2 級 ‧ 2018-06-22 13:49:38

一般來說,如果現存資料已存在不同字但同義。如「台南」「臺南」的情況下。
做法有其下

字元統一對應法:

  1. 先將所有在資料庫內的相義字,用取代的方式統一一下。
  2. 在輸入及查尋中,採用key值自動對應。如無論輸入「台南」或「臺南」,統一變成「台南」。

以上的優點是讓資料字元會比較統一,版面上也會比較好。
缺點就是,有時一整句的情況剛好碰到轉義就很麻煩。

自動多重字詞搜尋法:

  1. 此需要先定義好字詞庫。一般我會用key對應法。如資料採用
    1=>台南
    1=>臺南
    則在無論輸入「台南」還是「臺南」,則會自動將「台南」或「臺南」的條件搜尋出來。

以上的方式給你參考,雖然還有另外一招,但這招就比較麻煩,另外一招跟第二招有點類同就是了。
只是是採用mysql本身的相似字字義的方式處理。但因為mysql並未對中文字有做相似字詞的定義方式。所以得採用特規的編碼處理。這處理起來很麻煩。我相信你不會用這招。

w4560000 iT邦新手 5 級 ‧ 2018-06-28 14:06:49 檢舉

謝謝各位回覆~ 抱歉隔了這麼久才回應

問題已解決。

 if (Query1.Contains("台"))
     Query2=Query1.Replace("台", "臺");
 if (Query1.Contains("臺"))
     Query2 = Query1.Replace("臺", "台");

我多設一個變數去搜尋~

我要發表回答

立即登入回答