空白で区切られた文字列のすべての順列について、データベース列varchar
を検索したいとします。例:すべての文字列置換をMysqlで検索
search: foo
matches: foo, foo bar, bar foo
search: foo bar
matches: foo bar, bar foo, bar foo green, green foo bar
私はPHPでPDOを使用して検索を行っています。多くの単語を含む文字列を作成して検索する際には、作成して含めることができる多くの置換があるため、スピードの問題があります。以下は、私が順列を生成するために使用しているPHPコードです。多分、用語の数を減らす方法がありますか?
function permutations($set) {
$solutions = array($set);
$n = count($set);
$p = array_keys($set);
$i = 1;
while ($i < $n) {
if ($p[$i] > 0) {
$p[$i]--;
$j = 0;
if ($i % 2 == 1)
$j = $p[$i];
//swap
$tmp = $set[$j];
$set[$j] = $set[$i];
$set[$i] = $tmp;
$i = 1;
$solutions[] = $set;
}
elseif($p[$i] == 0) {
$p[$i] = $i;
$i++;
}
}
return $solutions;
}
たぶん私は私の質問でこれをうまく表現していないかもしれませんが、検索語に2語があれば、両方の答えにしたいと思っています。 –
@JohnCarroll私のクエリがこの要件を満たしています。あなたはそれを試してみましたか?私は各検索語の存在をチェックし、すべてが存在する場合にのみレコードが返されます。 –
いいえ、私はテストをしなかった、私は説明を読んで、それは近いが、一致しないと思った。私は今試してみる。 –