0

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

入力ボックスに入力します

ea1

それは見つけます

ea-1

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

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

私のデータベースクエリ

 SELECT roomname        
 From sec_rooms_new
 where lower(roomname) like '%#lcase(url.term)#%' and dontshow = 0

jquery で行うか、db クエリで行うか。

4

1 に答える 1

5

クエリを次のように変更します。

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

このREPLACE 関数は、出現するものをすべて-空の文字列に置き換えます。これは、を検索するとにea-1なり、したがって返されることを意味します。ea1ea1

このクエリを実行するたびに、データベースがすべての行の値にREPLACEandLOWER関数を適用するため、このクエリの使用には時間がかかる場合があります。roomnameの準備された値を格納する追加の列を作成する方がよい場合がありますroomname(したがって、REPLACEおよびLOWER関数はすでに適用されています)。次に、この列を検索できます。これにより、はるかに高速になります。

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

于 2012-05-07T13:11:36.033 に答える