2009-08-04 4 views
2

私はlibrayソートでタイトルを取得するためにmysqlで次を使用します。ゴッドファーザーはゴッドファーザーとして分類されています。 (aptitle LIKE '%'、SUBSTRING(aptitle、5)、IF(aptitle LIKE 'A%'、SUBSTRING(aptitle、3)、IF(aptitle LIKE 'An%'))は、 AS sorttitleなど...ライブラリのソートタイトルを作成するためのPHP

文字列をライブラリソートバージョンに変更する最も効率的な方法は何ですか?タイトルの冒頭に「An」、「A」、「The」のいずれかが表示されなくなります。私は私のようなものを見てする必要があると仮定して修正しています:

substr_replace(「ザ・」、「」、0)

答えて

1

私はイエス、あなたが一般的に正しいと思います。私が知っている限り、PHPやMySQLには、このような並べ替えを支援するためのものは何も組み込まれていません。私が見たコードの実装では、上記のように、不要な接頭辞を取り除くために、すべての部分文字列置換ルールを使用しています。あなたが呼ばれる第二のカラムを格納するだろう小さなディスクスペースと正規化を見送るために喜んでいる場合を検討する

preg_replace("/^The /",'',$title,1); 

何か:あなたが唯一の文字列の先頭に一致を指定できるように、一般的にpreg_replace()が使用されていますsort_titleのようなもので、レコードを挿入する前に接頭辞を削除してください。これにより、MySQL内のsort_titleフィールドのインデックスとORDER BYが得られ、SELECTステートメントの複雑さが軽減されます。

もう1つ脇に、great PHP用の拡張機能です。

+0

ありがとう...私は実際には上記のmysqlステートメントを使用して、古いテーブルを作成し始めました...今、PHPから直接行うための関数です! – Ian

+0

preg_replaceの検索パターンでORをとることができますか? ?これがちょうど1つのpreg_repalce行でできるのではないかと思います... – Ian

+0

はい、 'preg_replace'は通常の正規表現構文を使用しているので、ORは単一のパイプ文字でサポートされています。 'preg_replace("/^(The | A | An |)/ "、$ title、1)'のようなことができます。 – zombat