

Сопоставление полей разных таблиц
Автор TelecomMedia, 13 апр. 2014 11:50
Сообщений в теме: 9
#1
Отправлено 13 Апрель 2014 - 11:50
Каким образом можно сопоставить поле "Логин" таблицы "Контрагенты" с полем "Логин" таблицы "Балансы" и в случае совпадения подтянуть в поле "Текущий баланс" табл. "Контрагенты" соответствующее значение из таблицы "Балансы"?
Т.е. сторонний софт делает выгрузку логинов с остатками баланса и необходимо загрузить эти балансы в каждую карточку контрагента.
Спасибо.
Т.е. сторонний софт делает выгрузку логинов с остатками баланса и необходимо загрузить эти балансы в каждую карточку контрагента.
Спасибо.
#2
Отправлено 14 Апрель 2014 - 09:47
А каким образом этот сторонний софт заполняет таблицы Балансы? Почему он не может сразу обновить и таблицу Контрагентов? Код стороннего скрипта можете привести?
#3
Отправлено 15 Апрель 2014 - 11:17
Из стороннего софта делается выгрузка в формате CSV. Синхронизировать скрипты впринципе нет смысла.
Нужно просто загрузить в таблицу "Балансы" логин и его баланс, а потом при совпадении логинов записать этот баланс в карточку контрагента.
Также будет необходимо где-то хранить предыдущие значения этих полей (определенное кол-во или определенное время) для того, чтобы можно было бы отслеживать динамику изменений.
Нужно просто загрузить в таблицу "Балансы" логин и его баланс, а потом при совпадении логинов записать этот баланс в карточку контрагента.
Также будет необходимо где-то хранить предыдущие значения этих полей (определенное кол-во или определенное время) для того, чтобы можно было бы отслеживать динамику изменений.
#4
Отправлено 15 Апрель 2014 - 14:50
Т.е. вы берете полученный сторонним скриптом файл CSV и импортируете его в таблицу Балансы? Правильно понял?
Мне не синхронизация скриптов нужна, мне важен способ заполнения таблицы, т.к. от этого зависит и способ сопоставления.
Мне не синхронизация скриптов нужна, мне важен способ заполнения таблицы, т.к. от этого зависит и способ сопоставления.
#5
Отправлено 16 Апрель 2014 - 08:18
Да, вы все правильно поняли.
#6
Отправлено 16 Апрель 2014 - 11:01
Тогда подойдет стандартное вычисление на изменение поля в таблице Балансы. Оно будет работать как при ручном добавлении/изменении, так и при импорте (которое по сути то же самое добавление, только автоматизированное).
Соответственно, в коде вычисления делаете запрос на обновление с условием равенства полей с логином (как делать такие запросы, уже обсуждали с вами ранее)
Соответственно, в коде вычисления делаете запрос на обновление с условием равенства полей с логином (как делать такие запросы, уже обсуждали с вами ранее)
#7
Отправлено 22 Апрель 2014 - 14:03
Попробовал сделать вычисление:
где: 42 - таблица Контрагенты
f12831 - поле "Баланс" таблицы Контрагенты
$line['Баланс'] - поле "Баланс" таблицы "Балансы"
f12821 - поле "Связь с балансом" (связь с полем Логин таблицы "Балансы" по ID)
Не срабатывает.
if ($line['Логин'] == $line['Контрагенты']['Логин']) {data_update(42, array("f12831" => $line['Баланс']), "f12821=",$ID);} else{;}
где: 42 - таблица Контрагенты
f12831 - поле "Баланс" таблицы Контрагенты
$line['Баланс'] - поле "Баланс" таблицы "Балансы"
f12821 - поле "Связь с балансом" (связь с полем Логин таблицы "Балансы" по ID)
Не срабатывает.
Сообщение отредактировал fabrika-r: 22 Апрель 2014 - 14:04
#8
Отправлено 22 Апрель 2014 - 16:10
Откуда у вас в Балансах взялось поле связи с Контрагентом, не понял? Я про $line['Контрагенты']['Логин']. Оно подразумевает наличие поля связи "Контрагенты" в таблице Балансы. Если это поле есть и заполнено, то непонятно зачем вообще тогда вам логины сопоставлять (т.к. уже есть связь через поле связи). Или вы все опять сильно напутали и неправильно поняли меня. Я подразумевал равенство логинов непосредственно в запросе, без наличия какого либо поля связи:
data_update(42, array("f12831" => $line['Баланс']), "f111='",$line['Логин'],"'"); // 111 - поле Логин в Контрагентах
#9
Отправлено 22 Апрель 2014 - 16:50
Я наверное опять все усложнил)
Сделал как вы сказали, получилось.
Спасибо.
Сделал как вы сказали, получилось.
Спасибо.
Сообщение отредактировал fabrika-r: 22 Апрель 2014 - 16:50
#10
Отправлено 22 Апрель 2014 - 21:04
Помогите, пожалуйста, еще с одним моментом - Вычисление в таблице "Контрагенты". Если поле "Логин" т. "Контрагаенты" совпадает с полем "Логин" т. "ХХХ", то необходимо перенести поле "Юр. название" из т. "Контрагенты" в т. "ХХХ".
где: 661 - таблица "ХХХ" куда нужно перенести данные
f13141 - поле "Юридическое название" таблицы "ХХХ". Поле типа связь с таблицей "Контрагенты".
$line['Юридическое название'] - поле в таблице "Контрагенты"
f13021 - поле "Логин" т. "ХХХ"
$line['Логин'] - поле "Логин" т. "Контрагенты".
Если f13141 указать как поле типа текст, то значение записывается в таблицу, но перейти в карточку контрагента не представляется возможным.
А если f13141 оставить полем типа связь, то значение не передается. Пробовал передавать как
$line['Юридическое название']['raw'] - тоже не передавалось.
data_update(661, array("f13141" => $line['Юридическое название']), "f13021='",$line['Логин'],"'");
где: 661 - таблица "ХХХ" куда нужно перенести данные
f13141 - поле "Юридическое название" таблицы "ХХХ". Поле типа связь с таблицей "Контрагенты".
$line['Юридическое название'] - поле в таблице "Контрагенты"
f13021 - поле "Логин" т. "ХХХ"
$line['Логин'] - поле "Логин" т. "Контрагенты".
Если f13141 указать как поле типа текст, то значение записывается в таблицу, но перейти в карточку контрагента не представляется возможным.
А если f13141 оставить полем типа связь, то значение не передается. Пробовал передавать как
$line['Юридическое название']['raw'] - тоже не передавалось.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных