人の名前に基づいて、テキスト フィールドの下に提案/オートコンプリートの結果を表示する必要があるという問題に直面しています。全員をリストにロードし、起動時にコレクションとして並べ替える必要がありますか?それとも、データベースで名前でインデックスを作成し、その人の名前が特定の文字列で始まる行のみを選択することはできますか?
もちろん、潜在的に巨大なリストをメモリに保持する必要はありません。そのため、ここで SQL を使用する方法を誰かが提案できれば、それは素晴らしいことです。
DB 内のテーブルのクエリ: 毎回 db 呼び出しを行う場合、これは比較的遅くなります。
中間層への保存: これは db 呼び出しよりも高速です。ただし、ここでも複数のアプローチを使用できます。
1) DB からデータをフェッチして保存します
。2) キャッシュを事前に設定してから、キャッシュにクエリを実行します。
クライアント側への保存: データ/名前を js ファイルに保存し、js ライブラリを使用して効率的に検索を実行します。このjsライブラリを試してみたところ、かなり良いことがわかりましたWICK: Web Input Completion Kit。
また、html 5 はローカル ストレージをサポートするようになったので、これも評価できます。
したがって、すべてのオプションを評価してから、必要なものを 1 つ見つける必要があります。
すべてをコレクションに入れると、名前全体のオーバーヘッドになると思います
アプローチ
ユーザーの完全なリストである AJAX 関数を提供しますname like 'input%' to DB
。
onkeyPress()
入力フィールドでこの関数イベントを呼び出します
を使用することをお勧めjQuery
します。これは、フィールドに入力するときに提案を提供するのに役立ちます。これがデモです
データソースは、source-optionの単純なURLを介して指定されたJSONデータを返すサーバーサイドスクリプトになります。さらに、minLength-optionを2に設定して、返される結果が多すぎるクエリを回避し、select-eventを使用してフィードバックを表示します。
検索のようなオプションが必要な場合は、クエリのようなものを使用SELECT * FROM TABLE_NAME WHERE NAME LIKE %manu%
してテーブルに表示できます
オートコンプリートは、ユーザーが入力した文字に基づいて結果を検索することを目的としています。このクエリを使用して、パターンに一致する行を取得するだけです。
SELECT uname FROM table WHERE uname like 'cha%';
ここcha
にユーザーからの入力があります。
オートコンプリートは取得します
chaten
chaitanya
charles