2011-01-21 17 views
0

タイトルの最初の文字で、100万を超えるエントリでテーブルを参照できるようにする必要があります。文字列の最初の文字と数字または非標準文字の一致

A-Z、0-9のすべての文字をリストで一緒に検索し、他のすべての文字を一緒に参照できるようにします。

大きなデータベースで、ウェブサイトに表示されるので効率的である必要があります。正規表現はインデックスを使用しないので、それは遅すぎるでしょう。

これは可能ですか、それともデザインを再考する必要がありますか?

事前

答えて

0

すべての文字と数字を表すリンクを作成します。これらのリンクをクリックすると、選択した文字で始まるデータベースの結果がユーザーに表示されます。

SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC; 

これらの結果ページを適切なチャンクに改ページすることを検討してください。 MySQLは、あなたが希望の文字グループから最初の100件のレコードを選択しますLIMIT

このコマンドでこれを行うようになる。

SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC 
LIMIT 0, 100; 

このコマンドは、目的の文字グループからの第二100件のレコードを選択します:

をあなたのコメントパー
SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC 
LIMIT 100, 100; 

、あなたは正規表現を使用してせずに文字0-9 を結合したい場合、あなたはいくつかのOR文を結合する必要があります。

SELECT title FROM table 
WHERE (
    LEFT(title,1) = '0' 
    OR LEFT(title,1) = '1' 
    ... 
    ) 
ORDER BY title ASC; 
+0

LEFT(タイトル、1)= "*"はかなり遅いですか?他の文字で始まるタイトルはどうですか?ありがとう:) – Simon

+0

特定の数字ではないアルファベット以外の文字を選択することを意味しますか?文字数が限られていることが分かっている場合は、いくつかの 'OR'文を使用したいかもしれません。さもなければ、あなたのユーザが非常に頻繁にそのような文字で始まる結果をブラウズしないならば、 'REGEXP'を使うことを考えてください。クエリの速度をテストする必要があります。 – JYelton

+0

これについて考えてみると、OR文が実際に機能するかもしれません。ありがとう、それを感謝します。 – Simon

1

のおかげである限り、「タイトル」にインデックスがありますように、あなたが

 
select * 
from myTable 
where Title like 'A%' 
のようなSQLを使用することができるはずです(「Cの%」、または「Bの%」...)

+0

申し訳ありませんが、私は既にA-Zのためにそれを行っていると私は考えていました。しかし問題は、1つのクエリで0-9を取得し、1つのクエリでA-Z0-9で始まらないすべてのタイトルです。 – Simon

関連する問題