$str_search = 'SLAOG';
SELECT word
FROM table_name
WHERE word REGEXP '^[{$str_search}]+$' # '^[SLAOG]+$'
// Filter the results in php afterwards
// Loop START
$arr = array();
for($i = 0; $i < strlen($row->word); $i++) {
$h = substr($str_search, $i, 0);
preg_match_all("/{$h}/", $row->word, $arr_matches);
preg_match_all("/{$h}/", $str_search, $arr_matches2);
if (count($arr_matches[0]) > count($arr_matches2[0]))
FALSE; // Amount doesn't add up
}
// Loop END
基本上对给定的单词运行 REGEXP,并根据单词与搜索单词相比的出现次数过滤结果。
REGEXP 使用给定单词的组合从头到尾检查所有列。这可能会导致您需要的行数更多,但它仍然会提供一个很好的过滤器。
循环部分是过滤在搜索字符串中使用更多次字母的单词。我preg_match_all()
在 find the word 和 search word 中的每个字母上运行 a 以检查出现次数,并将它们与count()
.