Перейти к содержимому


Копирование значений из одной таблицы в другую


Сообщений в теме: 19

#1 UmaCat

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 08 Ноябрь 2012 - 11:42

Таблица 1
Поле Референс
+Много полей со связями на другие таблицы (по сути справочники)

Таблица 2
Связь с таблицей 1 по Полю Референс
+ Пустые поля

Как при помощи вычислений скопировать значения из Таблицы1. простое
$line['Поле таблицы2']= $line['Референс']['поле таблицы 1 ХХ'];
дает просто ID записи в справочной таблице. А надо просто скопировать само значение
Устанавливать связи с таблице 2 со справочниками, чтобы визуально значения подтягивались, как-то не то что нам надо.

#2 UmaCat

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 08 Ноябрь 2012 - 13:06

похоже понятно, что через SQL запросы к соответствующим таблицам-справочникам
попробую...

Гуру, помогите, что-то не так сделал :(
f1354 - поле значение которого мне надо получить из таблицы справочника
112 - таблица справочник
f1350 - поле в таблице справочнике где находится ID
$line['Статья учета']['Место затарки'] - получение ID из связанной таблицы (связь по полю Статья учета)

$sqlQuery = "SELECT f1354 as loadplace FROM ".DATA_TABLE."112 WHERE status=0 AND f1350=".$line['Статья учета']['Место затарки'];
$res = mysql_query($sqlQuery);
$row = mysql_fetch_array($res);
$line['Loading Place'] = $row['loadplace'];

Сообщение отредактировал UmaCat: 08 Ноябрь 2012 - 13:20


#3 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Ноябрь 2012 - 13:22

Просмотр сообщенияUmaCat (08 Ноябрь 2012 - 11:42) писал:

простое
$line['Поле таблицы2']= $line['Референс']['поле таблицы 1 ХХ'];
дает просто ID записи в справочной таблице. А надо просто скопировать само значение

В чем проблема задать более развернутую ссылку?

$line['Поле таблицы2']= $line['Референс']['поле таблицы 1 ХХ']['поле из справочника с нужным значением'];


#4 UmaCat

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 08 Ноябрь 2012 - 13:40

Просмотр сообщенияCbCoder (08 Ноябрь 2012 - 13:22) писал:

В чем проблема задать более развернутую ссылку?

$line['Поле таблицы2']= $line['Референс']['поле таблицы 1 ХХ']['поле из справочника с нужным значением'];
Гениально! Я не знал что так можно делать :o
Спасибо!!!

#5 calebfreeman

    Участник

  • Пользователи
  • PipPip
  • 28 сообщений

Отправлено 26 Июнь 2014 - 06:57

Добрый день.

Можно на пальцах объяснить для "тупых"

Как скопировать данные из поля типа связь

Делаю вот так:
$arr['Клиент'] = $line['Клиент']
$newid = insert_query($arr, "Завершено");

Почитал тему, понял что так я копирую ID связи.
Но так и не понял как мне добраться до исходной таблицы из которой я беру данные.

у меня следующая цепочка связи получается для поля клиент - 'Поле клиент' = > "Таб. В работе, поле клиент" = > "Таб. Контрагенты, поле Название"

Пробовал записать как
 $arr['Клиент'] = $line['Клиент']['f4681']['f435']; 
Использую ID полей в таблицах для обращения, ничего не вышло.

Помогите разобраться как правильно сделать.

Сообщение отредактировал calebfreeman: 26 Июнь 2014 - 07:01


#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Июнь 2014 - 08:48

Зачем использовать id полей? В $line можно вставлять непосредственно имена. Например, $line['Клиент']['ФИО клиента'].

#7 calebfreeman

    Участник

  • Пользователи
  • PipPip
  • 28 сообщений

Отправлено 26 Июнь 2014 - 09:00

Поле из связанной таблицы как правильно должна вызываться, имя таблицы должно указываться? Я уже с 10-ток вариантов перебрал, всё время выводит пустоту ((

пробовал сделать
$arr['Клиент'] = $line['Клиент']['Контрагенты']['Название'];

и так

$arr['Клиент'] = $line['Клиент']['Контрагенты']['Название']['ID'];

и так

$arr['Клиент'] = $line ['Контрагенты']['Название']

Сообщение отредактировал calebfreeman: 26 Июнь 2014 - 09:18


#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Июнь 2014 - 09:20

Нет, никаких имен таблиц в $line не используется. Только поля. Последовательность простая: $line['Поле связи']['Поле из связанной таблицы']. Но, если выбранное поле в связанной таблице тоже является полем связи, то аналогично раскрывается и оно, например: $line['Поле связи']['Поле из связанной таблицы1']['Поле из связанной таблицы2'], и т.д.

#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Июнь 2014 - 09:36

Просмотр сообщенияcalebfreeman (26 Июнь 2014 - 09:00) писал:

пробовал сделать
$arr['Клиент'] = $line['Клиент']['Контрагенты']['Название'];

и так

$arr['Клиент'] = $line['Клиент']['Контрагенты']['Название']['ID'];

и так

$arr['Клиент'] = $line ['Контрагенты']['Название']

Все 3 способа абсолютно неверны, т.к. как уже я выше написал, никаких имен таблиц в $line не используется! В вашем случае правильно будет $line['Клиент']['Название'].

Сами подумайте, зачем тут нужно имя таблицы, когда само поле связи уже ссылается на нужную запись? А использование только имени таблицы (как в 3-м варианте) рождает неопределенности, т.к. полей связи с данной таблицей может быть несколько (например Заказчик и Исполнитель оба ведут на Контрагентов, только разных).

#10 calebfreeman

    Участник

  • Пользователи
  • PipPip
  • 28 сообщений

Отправлено 26 Июнь 2014 - 09:42

Вариант $line['Клиент']['Название'] не работает в моем случае, я его пробовал.

Опишу как связанны поля.

Я копирую данные из таблицы "В работе" в таблицу "Завершено"

Поле "Клиент" таблицы "В работе" связанно с полем "Название" таблицы "Контрагенты"

Вопрос, поле "Клиенты" в таблице Завершено должно быть как то связанно с таблицей "В работе"?

Сообщение отредактировал calebfreeman: 26 Июнь 2014 - 09:47


#11 calebfreeman

    Участник

  • Пользователи
  • PipPip
  • 28 сообщений

Отправлено 26 Июнь 2014 - 10:05

Почистил кэш и всё заработало.

#12 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Июнь 2014 - 10:26

Цитата

Я копирую данные из таблицы "В работе" в таблицу "Завершено"

В случае копирования может иметь существенное значение, какое именно поле вы берете в связанной записи, а это в свою очередь зависит от типа поля, в которое вы это значение копируете. Например, если поле-получатель в Завершено тоже является полем связи с Контрагентом, то копировать надо поле ID (т.е. $line['Клиент']['ID']), т.к. в полях связи хранятся именно ID связанных записей. И только в случае если там просто текст (поле с типом "текст"), то тогда можно копировать непосредственно Название.

#13 calebfreeman

    Участник

  • Пользователи
  • PipPip
  • 28 сообщений

Отправлено 26 Июнь 2014 - 17:59

Сделал проверку на дублирование.
Хочу при дублировании выводить алерт с номером стенда который уже дублируется.

echo "<script>alert('Стенд с номером ".$arr['№Стенда']." уже существует')</script>";

Соответственно выводится поле связи.
В алерт поподает ID связи, как в алерт запихнуть именно №стенда из связанной таблицы?

#14 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 27 Июнь 2014 - 10:20

А $arr['№Стенда'] откуда берется? Если из $line, то кто мешает вывести непосредственно его? С нужным полем на втором уровне.

#15 Dmitry506

    Активный участник

  • Пользователи
  • PipPipPip
  • 30 сообщений
  • Пол:Мужчина
  • Город:Орел

Отправлено 27 Март 2015 - 11:14

Добрый день.
Может быть не совсем в тему, но похоже.
Каким образом можно скопировать из одной таблицы в другую все строки таблицы у которых одно поле содержит одинаковые значения.
На пример.
Есть таблица "Клиенты" с полем "Название абонемента" (тип поля - Список) в котором можно выбрать Абонемент1 или Абонемент2.
Есть таблица "Процедуры", подчиненная таблице "Клиенты" с полем "Название процедуры"
Есть таблица "Справочник" с полями: "Название абонемента" и "Название процедуры", заполненная как:
Абонемент1 --- Процедура 1
Абонемент1 --- Процедура 2
Абонемент1 --- Процедура 3
Абонемент2 --- Процедура 4
Абонемент2 --- Процедура 5

Так вот необходимо, чтобы при выборе в таблице "Клиенты" одного из абонементов в подчиненную таблицу "Процедуры" добавлялись из справочника все процедуры, соответствующие выбранному абонементу.
Как можно все это реализовать.
Может быть это уже кто то делал, наверняка стандартная задача.

Сообщение отредактировал Dmitry506: 27 Март 2015 - 11:37


#16 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 27 Март 2015 - 11:38

Вычисление на событие изменения поля "Название абонемента":
1. Запрос к таблице "Справочник" с фильтром по названию выбранного абонемента.
2. Проходим в цикле по выбранным записям и копируем их в таблицу Процедуры по одной, не забывая заполнять поле связи с клиентом.

Оба пункта стандартные, примеров полно.

#17 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 29 Июнь 2015 - 15:19

Можно ли при копировании таблицы по кнопке "Копировать"отключить сообщение с запросом о копировании подтаблиц и соответственно подтаблицы не копировать?

#18 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Июнь 2015 - 17:44

Пока нет, необходима доработка функционала подтаблиц. В принципе мы это планировали, но отложили в свое время. Добавьте предложение сюда, постараемся сделать.

#19 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 29 Июнь 2015 - 19:49

Где взять логин пароль для входа?
Как полностью убать кнопку копировать и отключить копирование таблицы?

#20 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 30 Июнь 2015 - 10:38

Просмотр сообщенияf-jeka (29 Июнь 2015 - 19:49) писал:

Где взять логин пароль для входа?

http://clientbase.ru...?showtopic=5978

Цитата

Как полностью убать кнопку копировать и отключить копирование таблицы?

Насколько помню, копирование убирается только при запрете добавления.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных