Запрос MySQL для анаграмм - PullRequest
2 голосов
/ 23 июля 2011

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

$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 <- вот описание </p>

Ответы [ 2 ]

1 голос
/ 23 июля 2011

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

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

$query = mysql_query("SELECT * FROM $db_table WHERE alpha = 'aept' ORDER BY word DESC");
1 голос
/ 23 июля 2011

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

, а затем выполнить 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

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

length (word) = strlen ($ wordy)

...