thekip
Дата: 14.12.2012 17:19:34
Есть две таблицы с абсолютно одинаковой структурой. В обоих есть колонка name.
Задача: выбрать для каждой записи из первой таблицы, похожие варианты из второй.
Похожесть определяется просто по наличию слов. Т.е. где больше слов совпало, тот больше похож.
Самое просто и банальное решение, это для каждой строки из первой таблицы создавать запрос с FULLTEXT поиском, и полученные результаты собирать в какие ни будь внутренние структуры.
Вариант рабочий, но при увеличении количества записей в первой таблице, будет арифметически увеличиваться количество запросов. И при количестве строк ~1000, такое количество запросов недопустимо (при том что при каждом из этих запросов, оно будет проходиться поиском по еще большей таблице)
Я пытаюсь избежать такого варианта, и пробовал разные комбинации джоинов.
Изначально возлагал надежду на полнотекстовый поиск, и что я смогу использовать его в конструкции ON, но к сожалению, в AGAINST() может находиться только константа, т.е. я не могу подставить туда значение из первой таблицы, что бы он искал по второй.
Начал курить в сторону функций по нахождению расстояния между строками. Вообщем заимплементил алгоритм левенштейна, но вот я уже пишу этот пост минуты 3, а выборку запустил 5 минут назад, и она еще не закончилась.
Вообщем четно говоря варианты иссякли, может вы что ни будь подскажете?