|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
41432
|
|