Появилась необходимость очистить базу от дублей, но ладно бы если дубли были строго идентичные, проблема в том что слова могут быть расположены в разных частях предложения
И далее по нарастающей:
1) слово1 слово2 слово3
2) слово1 слово3 слово2
3) слово2 слово3 слово1
4) слово3 слово1 слово2
...
Надеюсь мысль понятна. Есть ли какая нибудь функция на mysql где можно отсортировать предложение по словам? Или придется на пыхыпы мучатся?
Также посоветуйте лучший алгоритм.
Если на пхп, то разбивать слова, перебрать различные варианты с перестановкой слов и удалять полученные варианты с базы.
я думаю проще будет ее в лоб и решить .... на PHP пробежаться: 1) explode(' ',$str); 2) strtolower(); 3) sort(); 4) $result = implode(''); 5) $KEY = md5( $result ) а потом уже по этому $KEY и удалять дубли.
ну можно процедуру для mysql сделать, но она не будет быстрее работать.
я бы key сохранил в базу, тк если база огромная, друг скрипт на середине "вылетит" и тогда все накопленные ключи слетят .... а так запускать скрипт по крону например .... пусть раз в минуту по 1000 записей обрабатывает типа select * from `table` where `key` is null limit 1000; а потом уже как вся база будет обработана или удалять или что то еще с дублями делать.
Дмитрий Для своей текущей задачи именно так и реализовал фильтрацияю лишних словосочетаний. Решил на Python. Код запостил пока тут smartking.ru/scripts/remove-duplicate-keys , если возникнет необходимость дорабатывать с учетом больших объемов данных, буду решать задачу по мере поступления. Пока же скрипт отработал быстро, при работе с достаточно большим файлом csv формата.