簡體   English   中英

如何處理MySQL查詢上的搜索變體?

[英]How to handle search variant on MySQL query?

我對我們的PhoneNos台電話號碼列表

ID | PhoneNo
1 | +61 2 9666 8000 

我們嘗試將此電話號碼搜索到“ 內容”表中(即desc字段)

實際的挑戰是:

desc字段是文本,輸入內容可以是任何東西,例如:

ContentID | Desc    
1 | bla bla ... +61 (02) 9666 8000 ... bla bla
2 | bla bla ... +61-2-9666-8000 bla bla
3 | bla bla ... +61 2 96668000 bla bla
4 | bla bla ... +61296668000 00116129668000 bla bla

或可能是由多余的間距安排的任何東西,例如

5 | bla bla ... +61  (02) 9666   8000 ... bla bla
6 | bla bla ... +61-2 9662 0382 ... bla bla

那還是澳大利亞的電話號碼,但是可能是美國或其他任何國家,所以它與一個特定的國家並不緊密。

這款手機之前和之后沒有任何模式。 因此可以是任何東西。

無論如何,有沒有容易處理這種事情的方法? 我可能可以在上面構造每個條件,但我只是想知道是否有更好的解決方案。

只需將用戶輸入規范化為易於搜索的格式,即“ + [x]”。 如果用戶輸入其他空格,請將其刪除。 如有必要,添加國家代碼。 從開始處刪除00並替換為+。 您甚至可以將“電話號碼”分為三列,以使搜索更加容易。

為什么不從電話號碼中刪除特殊符號,然后將其存儲為數字字符串呢?

您需要考慮的唯一情況是+,因為它替換了00。

因此,基本上,您的記錄將只有數字,您的輸入將只有數字。 只要確保在數據庫和輸入中都將+標准化為某種形式即可。

我要做的是將它們全部都用00而不是+來存儲,這樣當通過00進行搜索輸入時,它就會起作用,以及使用+進行搜索。 希望這是有道理的。

我的(未受過高等教育的)思想是使用正則表達式替換(請參閱此處 )。 本質上,除去內容中除數字和加號外的所有內容(感覺笨拙嗎?:)),然后與具有相同處理方式的控制字符串進行比較(基本上是\\\\+\\d+ )。 這就做出了一個相當寬泛的假設,即不會出現由另一個與您的數字匹配的數字/字符的隨機字符串產生的誤報(從概率的角度來看,我認為這不太可能,但總是有可能)。

我正在修改我確定效率極低,不雅且可能不正確的解決方案,並意識到用括號內的前導0不能處理這種情況(因為在其他模式中似乎沒有這種情況) 。 如果您好奇,可以在這里找到它,但是我認為正則表達式解決方案可能是最有效的處理方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM