|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.12.2017, 17:17 | #1 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Нужно построить
Здравствуйте.
Работая на сайте в магазине автозапчастей, столкнулся со следующей задачей ... Для тех, кто знает что такое "кроссы" в автомобильной тематике - можно сразу читать суть задачи. Есть набор взаимно заменяющихся запчастей (аналоги). Их может быть сколько угодно. Это могут быть запчасти от разных производителей, соответственно с разными артикулами (а иногда производители разные, сами запчасти тоже разные, а артикулы одинаковые). Для возможности подбора аналогов существуют "кроссы", где один кросс содержит четыре основных поля: 1 - наименование первого производителя. 2 - артикул первой запчасти. 3 - наименование второго производителя. 4 - артикул второй запчасти. Суть задачи. Для справки - в базе данных сайта имеется почти 12 миллионов записей кроссов. Все кроссировки двухсторонние (это само собой разумеется). Часто встречаются случаи, когда есть (допустим) три запчасти. Одна запчасть имеет кросс на вторую, вторая на третью. А третья не имеет кросса на первую (на вторую есть за счёт двусторонней кроссировки). А по логике вещей - должна быть. Задача: в имеющейся базе найти все кроссы, которые должны иметь кроссировку, но не имеют из-за описанного случая. Важно то, что в каждой такой "цепочке" может быть сколько угодно кроссов (в описанном случае их всего три), то есть по большому счёту предполагается связь "все со всеми". Дубликаты будут отсеиваться непосредственно перед добавлением, а за счёт двусторонней кроссировки дубликатов будет много. Какие идеи по реализации поиска вы можете предложить ? Выполнение предполагается на сервере; и да - я понимаю, что база кроссов разрастётся, но это собственно и нужно (но что бы правильно было всё).
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 15.12.2017 в 18:18. |
15.12.2017, 18:22 | #2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
1. "забыть" про двухсторнность, и честно проверять и добавлять(если надо) ВСЕ возможные комбинации трех артикулов.
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 15.12.2017 в 18:26. |
15.12.2017, 18:23 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
mysql? Задача разовая для лечения?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
15.12.2017, 19:17 | #4 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Цитата:
Только ваш SQL-запрос - это не совсем то, что мне нужно, или я чего то не понял. Я предполагаю, что мою задачу нужно выполнять скриптом, или ещё чем. Ну и такая обработка будет длиться довольно долго. На основе имеющихся кроссов предполагается создание текстового файла, который будет содержать SQL-запросы для добавления тех кроссов, которые не "закольцованы". И этот файл в дальнейшем будет использоваться для последовательного импорта данных в базу. Иногда появляются новые источники кроссов. И в дальнейшем предполагается подготовка "закольцованных" кроссов на основе каждого отдельно взятого источника кроссов.
Подпись ? Не, не слышал ...
|
|
15.12.2017, 21:37 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А чего не ответил по поводу СУБД? Скорее всего мускул, а там с иерархическими средствами туго. Набросал на сиквеле за не имением под рукой мускула.
Вот табличка Код:
Код:
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
16.12.2017, 00:09 | #6 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Аватар, да, mysql. Нужно для лечения, но не одноразового.
У меня полная свобода действий. Для нахождения полного перечня "разрывов" наверное нужен полный анализ данных. В ваших вариантах я не понимаю, где анализ или поиск ? Мне обязательно задачу выполнять в "один запрос" ? Данные же можно вытащить, расположить как угодно, и делать с ними что угодно ...
Подпись ? Не, не слышал ...
|
16.12.2017, 12:13 | #7 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
2. есть связи 1-->2 2-->3 будем добавлять связь 1-->3 3. not exists -- если вдруг уже есть
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 16.12.2017 в 12:15. |
|
16.12.2017, 13:57 | #8 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Если у меня есть пять запчастей, и цепочка идёт как 1-2, 2-3, 3-4, 4-5
Тогда получается следующее: - эту цепочку нужно обнаружить; - проверить наличие связей 1-3, 1-4, 1-5, 2-4, 2-5, 3-5 (с учётом двусторонней кроссировки); - добавить нужное при отсутствии. Или хватит проверки глубиной в две записи кроссов ?
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 16.12.2017 в 14:12. |
16.12.2017, 17:11 | #9 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Код:
Код:
Код:
Код:
Код:
Код:
Код:
Код:
Код:
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 16.12.2017 в 17:16. |
|
16.12.2017, 17:15 | #10 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
первый проход скрипта добавит 1-->3 2-->4 3-->5 4-->6 второй проход добавит 1-->4 1-->5 ... т.о. за M проходов добавим все цепочки длиной <=M. а какова максимальная группа схожих артикулов (какова может быть максимальная цепочка)?
программа — запись алгоритма на языке понятном транслятору
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужно построить диаграммы UML | RoseAle | Помощь студентам | 15 | 02.04.2015 07:56 |
Нужно построить диаграмму((( | grooveone | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 14.12.2013 15:22 |
нужно построить график | Kara777 | Помощь студентам | 1 | 17.05.2011 18:29 |
Нужно построить блок схемы | FEAREX | Помощь студентам | 0 | 27.12.2010 18:02 |