Join двух таблиц по схожести одной из колонок

thekip
Дата: 14.12.2012 17:19:34
Есть две таблицы с абсолютно одинаковой структурой. В обоих есть колонка name.

Задача: выбрать для каждой записи из первой таблицы, похожие варианты из второй.
Похожесть определяется просто по наличию слов. Т.е. где больше слов совпало, тот больше похож.

Самое просто и банальное решение, это для каждой строки из первой таблицы создавать запрос с FULLTEXT поиском, и полученные результаты собирать в какие ни будь внутренние структуры.

Вариант рабочий, но при увеличении количества записей в первой таблице, будет арифметически увеличиваться количество запросов. И при количестве строк ~1000, такое количество запросов недопустимо (при том что при каждом из этих запросов, оно будет проходиться поиском по еще большей таблице)

Я пытаюсь избежать такого варианта, и пробовал разные комбинации джоинов.
Изначально возлагал надежду на полнотекстовый поиск, и что я смогу использовать его в конструкции ON, но к сожалению, в AGAINST() может находиться только константа, т.е. я не могу подставить туда значение из первой таблицы, что бы он искал по второй.

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

Вообщем четно говоря варианты иссякли, может вы что ни будь подскажете?
Akina
Дата: 14.12.2012 18:27:44
Трансформируйте одну таблицу в пословную таблицу, после чего вяжите на вторую по вхождению и отбирайте для каждой группы (по записи другой таблицы) запись с максимальным count(*)