Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: SQL на добавление записей в 2 логически связанные таблицы из неструктурированной  (Прочитано 20070 раз)
0 Пользователей и 1 Гость смотрят эту тему.
VadimirL
Участник

ru
Offline Offline

« : 18-12-2009 10:43 » 

Уважаемые Господа!

Еще раз выражаю Вам свою благодарность за помощь, оказанную мне в решении вопроса по теме “SQL запрос для обработки неструктурированной таблицы”.

Теперь у меня появилась новая, не простая, как и всегда, задача:
Есть поставщики: Петров, Сидоров, Иванов. Каждый день они привозят различные товары в коробках – каждый свои.

Учет ведется в простой неструктурированной таблице.

  [Дата]    [Поставщик]   [Наименование товара]   [Количество Коробок]
20.10.2009    Петров              Котлеты                   10
20.10.2009    Сидоров             Помидоры                   3
20.10.2009    Петров                Рис                      2
21.10.2009    Иванов              Картошка                   1

Очень хочется раскладывать в реальном времени (ключ по дате) эту информацию в 2 другие, связанные между собой таблицы: Связать исходную таблицу с новыми НЕЛЬЗЯ.

1. «Доставка сводная» - ненужно наименование товара, только общее количество коробок по поставщикам
2. «Доставка развернутая»

Я предполагаю, что таблица «Доставка развернутая» будет повторять исходную таблицу с дополнительным полем [ID_ Доставка сводная] – для связи с таблицей «Доставка сводная», путем простого ДОБАВЛЕНИЯ ЗАПИСЕЙ:

[ID]  [ID_ Доставка сводная]  [Дата]  [Поставщик]  [Наименование товара]  [Количество Коробок]


Записи в Таблицу «Доставка сводная» ДОБАВЯТСЯ  запросом с группировками по полям [Дата], [Поставщик] и [Sum- Количество Коробок]

[ID] [Дата]  [Поставщик]  [Наименование товара]  [Количество Коробок]


Необходимая логическая связь: «Доставка сводная»! [ID] - «Доставка развернутая»! [ID_ Доставка сводная].


В результате хочется получить из исходной 2 таблицы с логической связью «Доставка сводная»! [ID] = «Доставка развернутая»! [ID_ Доставка сводная]:

«Доставка сводная»
[ID]   [Дата]     [Поставщик]   [Количество Коробок]   [Поля для дальнейшей работы]
  1  20.10.2009     Петров                 12
  2  20.10.2009     Сидоров                3     
  3  21.10.2009     Иванов                 1


«Доставка развернутая» (здесь поля [Дата] и [Поставщик] для информативности)
[ID] [ID_ Доставка сводная]   [Дата]        [Поставщик]   [Наименование товара]   [Количество Коробок]
  1           1             20.10.2009        Петров            Котлеты                10
  2           2             20.10.2009        Сидоров           Помидоры                3
  3           1             20.10.2009        Петров              Рис                   2
  4           3             21.10.2009        Иванов            Картошка                1



Трудности:  Необходимо добавить записи в 2 таблицы ОДНОВРЕМЕННО и
Не могу получить для поля «Доставка развернутая»! [ID_ Доставка сводная] соответствующее значение «Доставка сводная»! [ID] – (т.к. счетчик)

Составной ключ [Дата]+[Поставщик] для таблицы «Доставка сводная» использоваться не может, т.е. (в связи с порядком организации работ – работы осуществляются этапами) в таблице «Доставка сводная» может появиться в один день несколько записей для одного Поставщика но с разными Количествами коробок и, соответствующих им, разными записями в таблице «Доставка развернутая».

Буду признателен за любую помощь в составлении такого SQL запроса.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 18-12-2009 10:49 » 

1. «Доставка сводная» - ненужно наименование товара, только общее количество коробок по поставщикам

Средняя температура по больнице?

Расшифруй свою строку
я понял так
Петров котлеты 10
Петров рис 2

Сводная
 Петров 12
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
VadimirL
Участник

ru
Offline Offline

« Ответ #2 : 18-12-2009 11:07 » 

Уважаемый Sla! Благодарю Вас за то, что Вы вновь подключились к моим вопросам!

Вы поняли правильно!

К Больнице этот вопрос никакого отношения не имеет. Специфика нашей работы состоит в том, что товар привозят на поддонах - известно от кого этот поддон и можно быстро посчитать сколько там мест - [Количеству коробок], не вникая, на первом этапе,  в [Наименование товара].
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #3 : 18-12-2009 11:16 » 

VadimirL, одновременно вставить нельзя (в потоках, разве-что), да и не нужно. алгоритм следующий:

1) вставляем запись в Доставка Сводная (ДС)
2) получаем (ДС)ID
3) вставляем все остальные записи в Доставку Развёрнутую по этому ключу.

на выходе будем иметь классический master-detail.
Записан

VadimirL
Участник

ru
Offline Offline

« Ответ #4 : 18-12-2009 11:28 » 

Уважаемый x77!

Я не знаю, как получить (ДС)ID для каждого, из ТОЛЬКО ЧТО добавленных Поставщиков - поименно.
У меня возможна ситуация, что один поставщик сегодня приехал второй раз, при этом его предыдущий “приезд” уже обработан, и те записи трогать нельзя.
« Последнее редактирование: 18-12-2009 11:33 от Sel » Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #5 : 18-12-2009 11:40 » 

VadimirL,  усложните алгоритм:

1) ищем имярек в ДС на сегодняшнюю дату
2) находим - узнаём ID и текущее кол-во, не находим - заносим и получаем ID

з.ы. мне кажется, сюда просятся не две таблицы, а две вьюхи, причём во вьюхе ДС поле кол-во должно быть вычисляемым.
« Последнее редактирование: 18-12-2009 11:42 от x77 » Записан

VadimirL
Участник

ru
Offline Offline

« Ответ #6 : 18-12-2009 11:54 » 

Может – быть
1. ввести магическое понятие “Код рабочего места” – начинающегося с символа (не цифры), поле «Доставка сводная». [Количество Коробок] – VAR.
При добавлении записи в поле «Доставка сводная». [Поставщик]  писать поставщиков, а в «Доставка сводная». [Количество Коробок] писать “Код рабочего места” – т.е. бронировать эту строку.
2. Получать (ДС)ID для каждого по ключу НЕ ЦИФРА В «Доставка сводная». [Количество Коробок]
3. Добавлять записи в «Доставка развернутая»
4. Запросом на обновление менять “Код рабочего места” на реальное Количество.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 18-12-2009 12:19 » 

А зачем вообще эти две таблицы если требуемые данные можно получить из исходной, если отбросить не совсем понятные тут ID...
Достаточно сгруппировать данные по полям [Дата], [Поставщик] и просуммировать по [Количество Коробок].
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
VadimirL
Участник

ru
Offline Offline

« Ответ #8 : 18-12-2009 12:37 » 

Уважаемый RXL!

1. Исходную таблицу ведет Девочка в том, что ей удобно и чего она знает.  Еще она может щелкнуть левой кнопкой мыши по кнопке на экране.

2. Я недавно узнал, что есть возможность разместить Оперативные данные в MySQL на Internet Хосте.

Обе новые таблицы уже размещены в Internet. Каждая из них будет дополнена необходимыми полями, которые будут заполнять другие сотрудники – но как это будет я пока не знаю – говорят это PHP.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #9 : 18-12-2009 12:59 » 

VadimirL, каждая исходная запись будет вводится на некоей странице в инете ручками, и скрипт (который ПХП) должен будет разнести эти данные в две таблицы, с учётом возможных повторений?
Записан

VadimirL
Участник

ru
Offline Offline

« Ответ #10 : 18-12-2009 13:48 » 

Уважаемый x77!

В этой теме я приважу упрощенный пример в надежде на то, что Вы окажете мне Высококвалифицированную помощь в приобретении мной навыков составления сложных SQL запросов. Сформулировать полную реальную задачу я сегодня не в состоянии, да и вряд ли кто-то захочет разбираться в сложной – конкретной ситуации.

Исходные данные Девочка имеет в MS Excel. Их легко импортировать в MS Access. Здесь, благодаря драйверу ODBC, скоро появится, я надеюсь, запрос на экспорт этих данных в две новые таблицы в MySql которая в Internet. В этих 2-х, новых таблицах, которые в MySql которая в Internet, добавлены разные рабочие поля (например комментарии), необходимые ДРУГИМ сотрудникам. Поля должны предоставлять оперативную аналитику по предприятию и корректироваться либо автоматически, в соответствии с их базами в MS Access, либо вручную через страницу на PHP(про такую страницу я вообще ничего не знаю. Сразу вопрос – как обеспечить к ней доступ только по Логину и соответствующему Паролю. Слово – HTML-меня не пугает, а вот PHP как-то страшно!).
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #11 : 18-12-2009 13:58 » 

Уважаемый x77!

Исходные данные Девочка имеет в MS Excel. Их легко импортировать в MS Access. Здесь, благодаря драйверу ODBC, скоро появится, я надеюсь, запрос на экспорт этих данных в две новые таблицы в MySql которая в Internet.
- на чём основывается подобная каскадная проктология? почему Девочке (девочкам, мальчикам, соотрудникам, и т.д.) сразу не дать возможность вводить данные в MySql? какая разница, эксель открывать, или страницу в интер- или интра-нете?


Цитата
В этих 2-х, новых таблицах, которые в MySql которая в Internet, добавлены разные рабочие поля (например комментарии), необходимые ДРУГИМ сотрудникам. Поля должны предоставлять оперативную аналитику по предприятию и корректироваться либо автоматически, в соответствии с их базами в MS Access, либо вручную через страницу на PHP(про такую страницу я вообще ничего не знаю.
- данные должны быть централизованы, это аксиома. и хранится в жёстко-структурированном, не меняющемся виде. далее, либо пишется импорт из произвольных форматов, либо клиенты, работающие с центральной БД. в очень редких случаях - пишется трёхзвенка. схема Excel - Access - MySql - это от лукаваго, поверьте.

Цитата
Сразу вопрос – как обеспечить к ней доступ только по Логину и соответствующему Паролю. Слово – HTML-меня не пугает, а вот PHP как-то страшно!).
- это ерунда. в БД хранится логин и пароль, юзеру на странице предлагается ввести логин и пароль, далее в БД ищется логин с таким паролем, если находится - юзеру возвращается идентификатор сессии (как правило - через куки), и далее он идентифицируется по этой сессии. а ПХП - это обычный Си.
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 18-12-2009 14:01 » 

Уважаемый VadimirL. Улыбаюсь
(мне казалось, что мы уже все здесь уважаемы, так что привыкай к простому обращению).

Вот  ты написал один БОЛЬШОЙ абзац, в котором изложил свои возможности и пожелания.
А теперь разбей его по существующим задачам, возможностями и пожеланиями.

И, поверь. Тебя легче понять будет.
1. Ввод данных
2. Хранение
3. Импорт/экспорт.
4. Обработка.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 18-12-2009 14:03 » 

Цитата
а ПХП - это обычный Си.
Это обычный Basic Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #14 : 18-12-2009 14:06 » new

Offtopic:
Sla, а мне больше си напоминало Улыбаюсь бейсик я ненавижу с тех пор, как на моём первом ps2 накрылся единственный флоп, и всё развлечение сводилось к перегрузке в QBasic, который у 8086-х висел на отдельном прерывании и позволял работать с машиной до загрузки доса.
Поставлю в угол.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines