これは紛らわしい問題です。そのため、言葉遣いを理解するのは難しいように思われるかもしれません。単純な問題を複雑にしすぎている可能性があります。これを理解するのに役立つ質問の例を追加しました。
質問例
文字 hxinvarbav を含むデータベースから 5 文字の単語を検索します。DB 内の単語を編成して、アルファベット形式の単語の列も含めました。つまり、"happy" という単語には "ahppy" という値の列があるため、次のコードを使用して文字 hxinenvarbav からアルファベット順に整理できます。
<?
$letters = str_split('hxinenvarbav'); asort($letters);
$letters = implode('',$letters); // returns 'aabehinnrvvx'
?>
問題
ただし、mysql「LIKE '%aabehinnrvvx%'」で単純に検索して、これらの文字を含む 5 文字の単語を見つけることはできません。明らかに結果が得られないためです。おそらく私ができるMySQLクエリがない限り? たぶん、列を別の方法で編成します。ただし、 str_split($letters,5) を使用して、12 文字の組み合わせから 5 文字のチャンクを取得できます。
これらの 12 文字から考えられる 5 文字の組み合わせをチャンクに分割しながら、テーブルにクエリを実行する必要があることを念頭に置いて、どうすればよいでしょうか。
これは理にかなっていますか?さらに詳しく説明する必要がありますか?おそらく、私は考えすぎて、達成しようとしていることを単純化できないようです。考えられるすべての組み合わせを見つけることができる複雑な数学があります。しかし、私はアルファベット順に配置したので、順列ではなく、組み合わせのみを検索しています。それに加えて、論理的に信じる限り、「各」組み合わせを照会する必要はありません。たった 12 文字から 792 の可能な 5 文字の組み合わせがあるため (繰り返しの文字を計算せずに)。したがって、792 回のクエリ呼び出しは適切ではありません。また、クエリ内の 792 個の OR ステートメントは明らかにオプションではありません。笑!。
助言がありますか?
アルファベットから離れた使用可能な文字で検索することを考えましたが、一部の単語には文字が繰り返されるため、それもオプションではありません.