Очень хитрое сравнение строк

K

knyshow

Гость
Добрый день.

Ребята, ну помогите - голова вроде варит, но сам додуматься не могу.

Есть MySQL, есть РНР. Есть в мускуле две таблицы. В каждой - каталог товаров.

Мы будем говорить только о наименованиях - поля varchar(255) с именем title в обоих таблицах.

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

Одна и та же позиция, но в этих таблицах выглядит по-разному, например:
В первой таблице "Водка 0,75 Абсолют #896", в другой таблице она же забита двумя позициями "Абсолют 75 водка" и "АбсолютВодка750 896". А иногда еще операторы писали а ошибками ("Апсолют")...

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

Вопрос: КАК СРАВНИТЬ ЭТИ ДОЛБАННЫЕ НАЗВАНИЯ???

Есть ли какой-нить алгоритм, которым это можно сделать с максимальной точностью? Пусть даже с огромными задержками, но сам алгоритм подскажите плиииииииииииз.

Ребята, очень надеюсь на вашу помощь - вы - последняя надежда.
 

GI80

Турист
Credits
0
Полностью автоматизировать процесс сравнения наврятли удасться. Как вариант можно предложить составить некую таблицу соотвествия. На форме выбирается какой-либо товар к которому все это надо привести, А в другое поле руками заносятся все его альтернативные названия. Т.е. что-то вроде основной товар "Водка 0,75 Абсолют #896" - альтернативные названия "Абсолют 75 водка" и "АбсолютВодка750 896". И как только в таблице находится альтернативное название товара - оно заменяется на основное.
 
K

knyshow

Гость
GI80 написал(а):
А в другое поле руками заносятся все его альтернативные названия
Это нереально. Названий может быть масса и сегодня альтернативных 10, а завтра их уже 15...

Это именно нужно автоматом и с максимальной точностью.
 

ScableR

Турист
Credits
0
Господи ну и запросы...

Самый наиболее точный (точность ~95%) - посадить трезвого оператора за ПК и дать ему установку - вылизать обе БД. Это реально сделать, если экспортировать их и отсортировать в каком-либо редакторе.

Именно так я и поступил бы, случись у меня схожая ситуация, только операторов выбрал бы из тех, кто забивал неверно таблицу - нахалтурили или спешили? Теперь исправляйте в свободное от работы время - и так каждый раз как только обнаружится неверное или дублирующееся значение. Наука им на будующее будет.

А вообще на такой случай следует хранить дампы БД за разные даты, просто каждую неделю/месяц смотреть что добавилось-изменилось и подправлять.

Если же говорить вообще о автоматическом-программном выполнении, то чудес не бывает - ПК как не умел, так и не умеет летать, а php ни в какую не сможет заиметь вдруг человеческую логику - а без неё тут ну ни как (включая орфографический анализатор против АбсолютВотка , которого я пока на php не встречал). Сам ведь говоришь, что названий может быть масса, и, какими бы извращёнными не были бы выборки из таблицы (на первый взгляд для этого можно использовать UNION & LIKE) погрешность будет выше 60 (т.е. на выходе можно увидеть неверный товар, и не увидеть верный) до тех пор, пока ручками БД не почистится...

Так что думай, что тебе лучше - лишиться половины таблицы из-за ошибки автоматического скрипта, или максимально точную получить БД.

А вообще я тебе не завидую в такой ситуации... Но помочь, кроме первого совета, ничем не могу, звиняй уж...
 
Сверху