我想搜索一個數據庫列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;
}
不完全。也許我沒有在我的問題中表達得很好,但如果搜索詞有兩個單詞,我希望他們兩個都在答案中。 –
@JohnCarroll我的查詢符合此要求。你有麻煩去測試它嗎?我檢查是否存在每個搜索項,並且只有當所有項都存在時纔會返回記錄。 –
不,我沒有測試,我讀了解釋,並認爲它接近但不匹配。我現在會測試。 –