2

私は mysql で以下を使用して、libray ソートでタイトルを取得します。たとえば、ゴッドファーザーはゴッドファーザーとしてソートされます。

SELECT apnumber, aptitle, IF( aptitle LIKE 'The %', SUBSTRING( aptitle, 5 ) , IF( aptitle LIKE 'A %', SUBSTRING( aptitle, 3 ) , IF( aptitle LIKE 'An %', SUBSTRING( aptitle, 4 ) , aptitle ) ) ) AS sorttitle など...

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

substr_replace( "" , "" , 0)

4

1 に答える 1

1

はい、あなたは一般的に正しいと思います。私の知る限り、この種のソートを支援するものは PHP にも MySQL にも組み込まれていません。私が見たコード実装はすべて、上記で想定しているように、一連の部分文字列置換ルールを使用して不要なプレフィックスを削除しています。通常preg_replace()、文字列の先頭のみで一致を指定できるようにするために使用されます。

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

少しのディスク容量と正規化を差し控える場合は、次のような 2 番目の列を格納しsort_title、レコードを挿入する前にプレフィックスを削除することを検討してください。これにより、MySQL 内のフィールドにインデックスをORDER BY付けて、ステートメントの複雑さを軽減できます。sort_titleSELECT

余談ですが、これはPHP 用に作成するのに最適な拡張機能です。

于 2009-08-04T21:32:53.077 に答える