Слово анаграмматор с sql%

Мне нужно создать скрипт для поиска слов с «пробелами», которые в основном составляют% в sql.

$numberofblanks = 1; //max 13
$searchedword = "WORD";
$searchedwordsorted = "DORW";

Приведенные результаты должны быть следующими:
WORDY WORLD CROWD SWORD WORDS DOWRY ROWED DROWN DOWER ROWDY

% word, w% ord, wo% rd, wor% d, слово% будет, но как насчет более сложных запросов с двумя или более пробелами?
Также задавался вопросом, может ли поиск в searchwordorted какой-либо полезной или это действительно не имеет значения, и это просто пустая трата пространства в моем столе.

Благодарим вас за помощь.
.Майк

Сначала я хочу исправить ошибку в вашем вопросе. В ваших запросах вы подразумеваете _ not % . Значение % означает любое количество символов (ноль или более). Используйте _ для обозначения ровно одного символа.

Теперь на решение … вам действительно не нужно отсортированное слово, хранящееся в базе данных. Вы могли бы просто сделать это:

 SELECT word FROM dictionary WHERE CHAR_LENGTH(word) = 6 AND word LIKE '%W%' AND word LIKE '%O%' AND word LIKE '%R%' AND word LIKE '%D%' 

Если у вас есть повторяющиеся буквы на вашем входе, необходимо правильно это обработать, чтобы все результаты содержали все дублированные буквы. Например, если вход FOO__ вам нужно проверить, что каждое слово соответствует как %F% и %O%O% .

 SELECT word FROM dictionary WHERE CHAR_LENGTH(word) = 5 AND word LIKE '%F%' AND word LIKE '%O%O%' 

Обратите внимание, что для этого подхода потребуется полное сканирование таблицы, чтобы оно не было особенно эффективным. Вы можете немного улучшить ситуацию, сохранив длину каждого слова в отдельном столбце и индексируя этот столбец.


Если у вас есть sortedword то вы можете повысить производительность, опуская % от дублированных букв, так как вы знаете, что они будут последовательно отображаться в sortedword . Это может повысить производительность, так как это уменьшает количество обратных следов, необходимых для неудачных совпадений.

 SELECT word FROM dictionary WHERE CHAR_LENGTH(word) = 5 AND sortedword LIKE '%F%' AND sortedword LIKE '%OO%' 

Другой подход, который требует наличия sortedword , заключается в следующем:

 SELECT word FROM dictionary WHERE CHAR_LENGTH(word) = 5 AND sortedword LIKE '%D%O%R%W%' 

Опять же, это требует полного сканирования таблицы. Опять же, если у вас есть повторяющиеся буквы, вам не нужен % между ними.

 SELECT word FROM dictionary WHERE CHAR_LENGTH(word) = 5 AND sortedword LIKE '%F%OO%'