Посоветуйте алгоритм нахождения аналоогов.

4m@t!c

Александр
Посоветуйте алгоритм нахождения аналогов.

Работаю с товарами различных производителей. Товары различных производителей могут быть взаимозаменямыми, например мороженное "Пломбир" может выпускаться несколькими фабриками, но на одной фабрике это мороженое называется "Холодок", а на другой фабрике - "Снежок", но реально - это один и тот же пломбир.
Есть таблица1 товаров, которая состоит из полей:
  1. partid //ID товара,
  2. partnum//каталожный номер товара,
  3. crossid//ID замены.
    [/list=1]
    Содержимое таблицы выглядит приблиительно так:
    Код:
    1	num1		7
    2	num2		7
    3	num3		7
    5	num4		8
    6	num5		8
    7	num6		0
    Т.е. Каждый каталожным номер имеет ID, а crossid объеденяет аналогичные товары. При поиске человек запрашивает номер num* ему возвращается запрошенный номер, а так же подкидываются все аналоги по crossid.

    По наследству досталась таблица, которая состоит из полей:
    1. partid //ID товара он же ID замены,
    2. partnum//каталожный номер товара,
      [/list=1]
      Содержимое этой таблицы2 выглядит так:
      Код:
      1	num1	
      1	sear2
      1	sear3
      
      2	num2	
      2	sear2
      2	sear4
      2	sear5
      В данной таблице ID товара выступает в роли признака аналогичности, а sear* - это каталожные номера других производителей. sear* - это номера, по которым можно найти номера num1. Клиент запрашивал sear*, а ему выдавались номера исключительно num*.
      Так вот в таблицу2 на протяжении надцати лет заносились данные, сейчас там их около 4 000 000, при ассортименте товара в 1 200 000 позиций.
      Сейчас ассортимент товара вырастает до 5 000 000 за счет того, что номера sear* нужно превратить в num*. Т.е. что бы по этим номерам можно было не только искать но и получать информацию, такую же как и по num*.
      Задача состоит в том, что бы таблицу 2 экспортировать в таблицу1.
      Проблема состоит в том, что данные в таблицу 2 вносились не всегда корректно - этому способстовала описанная струкутура. Человек просто брал номер товара num и приписывал к нему номера sear*. Т.е. если теперь просто присвоеить всем sear* partid и crossid в результате может получиться, что мороженное пломбир может оказаться фруктовым мороженным, чего не должно быть. Т.е. кто-то по ошибке взял и прописал одинаковый sear как для пломбира, так и для фруктового.

      Прошу помощи по созданию алгоритма. Для каждого num существует несколько sear, т.е. если в сравниваемых num совпадает несколько sear их нужно и брать, но так как сравниваю попарно для одних случае может оказаться что sear совпдает несоклько раз, а для других - один раз. Не могу представить как взять все сразу... ХЕЗ, даже и не знаю, как более корректно объяснить.

      Прошу прощения, что не прочел правила.
 

baev

‹°°¬•
Команда форума
Насколько понимаю, partid в первой таблице — автоинкрементное поле?

Я б так делал:
1. Делаем копию второй таблицы. Дальше работаем только с ней.
2. Цикл по первой таблице, удаляем из второй все num*
3. Импортируем из второй в первую то, что осталось.
 
Сверху