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




MySQL.RU - Webboard



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

> Original message text:
> 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млн.
> Подскажите, как это вообще решить?
>
>
>


From: Akina - 28/06/2012 - 21:15:17
Subject:Объединение множеств множеств
-----------------
Тэк-с...

Значит, идентичность книги идентифицируется у одного поставщика по равенству группы (cortage_id, id и agent_id), а у разных - по равенству ISBN...

Далее - понятие кластера какое-то уж больно мутное, ну да ладно... фактически задача стоИт так - идентифицировать определённую книгу у всех поставщиков во всех её ипостасях, верно? ведь именно эта совокупность и есть кластер? Тогда непонятно, почему из атрибутов кластера выброшен cortage_id - судя по описанию, в таблице есть записи с равными id и agent_id, но различающимися cortage_id - они что, гарантированно принадлежат разным книгам? а если это не так - то какова ценность этого атрибута?



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

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

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



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