Запрос MySQL для анаграмм

У меня есть этот скрипт:

$db = mysql_connect($hostname, $db_user, $db_password);
mysql_select_db($database,$db) or die( "Unable to select database");
mysql_query("set names 'utf8'");

$wordy = "pate";

$query = mysql_query("SELECT DISTINCT * FROM $db_table WHERE word LIKE '[pate]' ORDER BY word DESC");
$num = mysql_numrows($query); $i=0; 

while ($i < $num) {
    $word = mysql_result($query,$i,"word");

    echo $word." ";
    $i++;
}

$db_table содержит английские слова. Я хочу повторить все возможные анаграммы; в этом случае он должен выводить tape pate peat. Какой запрос я мог бы использовать для этого?

http://msdn.microsoft.com/en-us/library/ms179859.aspx ‹- вот описание


person faq    schedule 23.07.2011    source источник
comment
Печаль во благо. Итак, вы ищете IS_ANAGRAM или что-то в этом роде?   -  person Lightness Races in Orbit    schedule 23.07.2011


Ответы (2)


Я думаю, сначала вы должны переставить все буквы в слове, чтобы сформировать массив

затем выполните запрос sql, например:

SELECT DISTINCT * FROM $db_table WHERE word in ($array ) ORDER BY word DESC

появилась другая идея:

вы можете сделать что-то вроде...

SELECT DISTINCT * FROM $db_table WHERE word like '%$wordy[0]%' AND like '%$wordy[1]%' AND like '%$wordy[2]%' AND like '%$wordy[4]%' ORDER BY word DESC

Froe комментарии, которые я мог бы предложить вам использовать

длина (слово) = strlen ($ wordy)

person Gaurav Shah    schedule 23.07.2011
comment
скажем, вы переставляете буквенный паштет с помощью php и сохраняете его в массив -> $array - person Gaurav Shah; 23.07.2011
comment
Хм, кажется, моя идея плоха для слов длиной › 8 букв.. :( - person Gaurav Shah; 23.07.2011
comment
идея в том, что я не знаю, что использовать перестановку, я ищу самый простой способ - person faq; 23.07.2011
comment
В слове $wordy[x] отдельных букв? Боюсь, это выведет слишком много слов. - person JJJ; 23.07.2011
comment
да, это отдельные буквы.. Да, они будут возвращать такие слова, как xxxxpatexxxx, поэтому вы можете поставить еще одну проверку на длину слова, и это решит вашу проблему.. верно? - person Gaurav Shah; 23.07.2011
comment
Даже с проверкой длины слова это не сработает для слов, содержащих несколько экземпляров букв, например, звезды будут соответствовать таким словам, как начало. - person JJJ; 23.07.2011
comment
хм да.. договорились... подумаю и сообщу. - person Gaurav Shah; 23.07.2011
comment
stackoverflow.com/questions/3991729/ проверьте это - person Gaurav Shah; 23.07.2011
comment
stackoverflow.com/questions/3621494/ - person Lightness Races in Orbit; 23.07.2011

Если вы можете изменить таблицу, содержащую словарь, запустите сценарий, который добавляет поле для каждой записи, содержащей слово, с буквами, которые оно содержит, в алфавитном порядке. Затем вы можете расположить буквы искомого слова в алфавитном порядке и найти совпадения.

Лента, паштет и торф будут выглядеть как «аепт» в алфавитном порядке, тогда вы можете сделать

$query = mysql_query("SELECT * FROM $db_table WHERE alpha = 'aept' ORDER BY word DESC");
person JJJ    schedule 23.07.2011