我在MySQL數據庫的「地址」表中有地址。該表包含一個地址ID列和通常分類的地址相關列 - 名稱,行1,行2,郊區,州,郵政編碼等。許多字段允許NULL。MySQL和AJAX預測搜索實現選項
這用於客戶端的基於Web的界面 - 用戶可以通過在文本框中鍵入任意部分,從表中找到並選擇一個地址。匹配顯示,用戶可以選擇一個。
在文本框中的條款被視爲一個空格分隔的一系列搜索詞,而有關條款的每一個都必須出現在任何地址字段爲它顯示出來以供選擇。
我幾個實施方法之間撕開此:
當前方法:
- 在頁負載,異步HTTP請求( 「AJAX」)被用來檢索格式良好的列表中的所有地址(所有字段組合成一行,佔空白字段)。
- 只要文本框接收到輸入,就會使用jQuery查找並顯示此列表中的匹配項。
這種方法的好處是隻需要發送一個簡單的查詢,並且在搜索字段中輸入內容和查看響應之間沒有任何延遲,因爲搜索是在客戶端完成的(儘管這可能不會規模好 - 見下文)。它也避免了對複雜的SQL搜索的需求(我並不反對,我只是想實現一些東西來作爲概念證明,而且這種方法更快)。
不利的一面是,當頁面加載時,頁面必須檢索每個地址,並且數據庫可能最終會存儲數千個地址。
另一種方法是在用戶鍵入文本框時發送HTTP請求,該文本框將返回與使用SQL搜索表匹配的地址。需要更多的請求和更多的延遲,但每次只需要檢索和傳輸一部分地址。我可以根據需要輕鬆調整最短期限和輪詢頻率。
我想了解一下實現這個SQL方面的最佳途徑......
我建議最好是去創建它串接所有的搜索地址欄視圖和查詢中使用沿着WHERE子句「concatcolumn LIKE'%term1%'和concatcolumn LIKE'%term2%'和concatcolumn LIKE'%termN%'」的行?
任何想法或建議將不勝感激。
像這樣的搜索(儘管假設你混淆了術語/列佔位符)需要考慮多個搜索術語並在每個領域搜索它們......例如「(col1 LIKE term1 OR col2 LIKE term1)AND(col1 LIKE term2 OR col2 LIKE term2)」...因此,爲什麼我想知道是否所有可搜索列連接成一個視圖值得... – Greg 2013-03-05 07:38:48
在這種情況下您需要將搜索詞分割爲空格,然後執行column1 LIKE'%'+ searchterm1 +'%'等 – twoleggedhorse 2013-03-05 08:34:57