Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Объединение множеств множеств (Степан) 28/06/2012 - 17:23:45
      Re: Объединение множеств множеств (Akina) 28/06/2012 - 21:15:17



From: Степан - 28/06/2012 - 17:23:45
Subject:Объединение множеств множеств
-----------------
Добрый день!

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

Есть таблица со следующими полями:

CREATE TABLE `isbn` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`agent_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
`cortage_id` int(10) unsigned NOT NULL DEFAULT '0',
`ISBN` varchar(32) NOT NULL,
PRIMARY KEY (`ISBN`,`site_id`,`cortage_id`,`id`)
)

В эту таблицу заносятся данные о различных поставщиках книг, поле id - внутренний код книги у КОНКРЕТНОГО поставщика, поле agent_id - код поставщика, поле cortage_id - код группы значений ISBN (нумерация сквозная, пояснение ниже), поле ISBN - cобственно, он сам для отдельно взятой книги.

Все строки в таблице уникальные (см. primary key), id могут совпадать у РАЗНЫХ поставщиков, но почти всегда это разные книги. Исходных полей ISBN у каждой книги каждого поставщика может быть несколько - по причине переиздания и т.п., для этого введено было поле cortage_id, записи с одинаковыми cortage_id, id и agent_id принадлежат одной книге конкретного поставщика, при этом ISBN в вышеуказанной таблице - разный, то есть таблица развёрнута.

Необходимо для решения задачи написать на базе MySQL запрос, формирующий следующую таблицу:

CREATE TABLE `cluster` (
'cluster_id` unsigned NOT NULL DEFAULT '0',
`agent_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
`id` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`cluster_id`,`agent_id`,'id')
)
где cluster_id - идентификатор группы, где состоит та или иная книга, группа может состоять из одного значения (строки в этой таблице) по причине эксклюзивности данной книги и наличия только у одного поставщика, а может быть у нескольких поставщиков если очень в мэйнстриме книга.
agent_id - код поставщика.
id - код книги у поставщика.

Тонкий момент с примером работы:
Кластер должен нормально собираться даже если ISBN для книг не идентичен для всех поставщиков, но пересечение множеств говорит о принадлежности.

Пример данных для правильного кластера (2шт.):
id agent_id cortage_id ISBN
2 1 10 a
2 1 10 b
4 2 20 b
4 2 20 c
4 3 30 c
12 3 40 d
Общность между поставщиками 1 и 2 - это "b", между 2 и 3 - это "c", а между 1 и 3 нет прямого равенства, но пересечение множеств поставщиков указывает на принадлежность к кластеру.
Последняя строчка другой товар из второго кластера, "редкая книга" в текущей нотации.

Обработаем и на выходе получим следующее:
cluster_id agent_id id
100500 1 2
100500 2 4
100500 3 4
100501 3 12

Записей в исходной таблице около 5млн.
Подскажите, как это вообще решить?




[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
41432



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |