2011-11-14 12 views
0

PHPスクリプトによって駆動されるMySQLムービーポスター/ファンアートデータベースを構築しています。ユーザーが映画のタイトルを検索するオートコンプリート入力フィールドを作成しました。すべてのオートコンプリートフィールドが機能するように、ユーザーが入力を開始すると、ムービータイトルが表示されます。ワイルドカードを使用したMySQL LIKEステートメント

は今、MySQLのクエリは以下の通りです:

SELECT posters FROM pictures WHERE pictures LIKE '$text%' 

上記のパターンは、入力した文字で始まるすべての映画のタイトルに一致します。 dartabaseにはaprox 10.000ムービータイトルが含まれているため、ユーザーが最初の文字を入力するとオートコンプリート機能に遅延が生じます。オートコンプリート機能内で検索クエリを高速化するには、文字列の先頭に少なくとも2文字以上の文字を一致させるパターンを使用したいと思います。 たとえば、ユーザーのタイプ:

'pie' 

オートコンプリート機能が表示されるはずです:

'American pie' 
'American pie 2' 

助けないMySQLのワイルドカード '_'(アンダースコア)を使用します。オートコンプリート機能にこの機能を与える方法はありますか?

答えて

2
SELECT posters FROM pictures WHERE LENGTH('{$text}') > 1 AND pictures LIKE '%{$text}%' 

mysqlは最初のチェックが

を失敗した場合、すべての行をしようとしないことenougスマートですありがとうもexamppleのためのクエリのフィールド/このタイプの長助けを借りて、インデックス、そう長さ2と長さ5のうちの1つと残りの1つを作成します(あまりにも大きすぎない場合)

+0

素敵!今は期待どおりに動作します!ありがとうございました。 – Nicero

5
SELECT posters FROM pictures WHERE pictures LIKE '%{$text}%' 
+0

優秀!どうもありがとう!遅れはまだ高いです。どのように検索をスピードアップできますか?ある種のインデックス?私はMySQLの専門家ではありません。 – Nicero

+0

dbデザインを変更し、 'movie_id、keyword'のような' 1、アメリカン '、' 1、Pie'、 '2、American''、' 2、Pie'のようなキーワードテーブルを実装することで、その場合、私は一般的な単語、a、#sなどを省略します。 –

関連する問題