2012-05-07 12 views
0

入力フィールドに入力する任意の文字の組み合わせに対して機能するオートコンプリートがあります。しかし、今私はそれが私が探している結果のダッシュを無視したい。Jqueryオートコンプリートで検索時にダッシュを無視する

は私が

EA1

それは

EA1

オートコンプリートコード

$("#customer"+myIndex).autocomplete({ 
     source: "AS_userLookup.cfm", 
     select: function(e, ui){ 

私のデータベースクエリ

を見つける入力ボックスに入力します0
SELECT roomname   
From sec_rooms_new 
where lower(roomname) like '%#lcase(url.term)#%' and dontshow = 0 

私はjqueryでそれを行うのだろうか、それともDBクエリでやるのだろうか?

答えて

5

これにクエリを変更します。

SELECT 
    roomname   
FROM 
    sec_rooms_new 
WHERE 
    REPLACE(LOWER(roomname), '-', '') LIKE '%#lcase(url.term)#%' 
    AND dontshow = 0 

REPLACEfunctionは、空の文字列と-のいずれかの発生を置き換えます。つまり、ea-1ea1になりますので、ea1を検索すると返されます。

このクエリを実行するたびに、すべての行のroomnameの値にREPLACEおよびLOWERの関数が適用されるため、このクエリの使用が遅くなることがあります。準備された値roomnameを保存する余分な列を作成する方が良いかもしれません(したがって、REPLACELOWER関数が既に適用されています)。その後、この列で検索することができます。これははるかに高速です。

もう1つ:設定(列の種類と文字セット)によっては、LIKEはすでに大文字と小文字を区別している可能性があります。つまり、WHEREステートメントからLOWER関数を削除すると、クエリが高速になります。詳しくはMySQL docsをご覧ください。

+0

ありがとう、私はこれを試していたが、置換の中の "ALL"はエラーを起こしていた。 – user1253239

+0

このクエリはスケールアップされません。テーブルサイズが大きくなると、このクエリはより遅く実行されます。 – Yisroel

+0

@ user1253239置き換えに 'ALL'は表示されません。それは今働くのですか、あなたのコメントを間違って解釈しますか? – Jonathan

関連する問題