Выполняется переделка структуры базы, сам не могу разобраться - прошу помощи у общественности.
Что имеем сейчас:
Таблица 1 "Компании":
поля Название (текст), Форма собственности (связь, таблица с вариантами ООО, ОАО и т.п.), Комментарий (текст) и др.
Подтаблица 1.1 "Контакты":
поля "Компании" (текст, связь с т. "Компании", по полю Название), ФИО (текст), телефон (текст) и т.п. Плюс поле "Связь с Компании-клиенты" - см.ниже
Создаётся НОВАЯ таблица 2 "Компании-клиенты", на основе таблицы "Компании" - часть полей туда копируются.
Требуется привязать к ней имеющиеся Контакты, по полю ID.
В подтаблицах у нее - "Контакты" уже указаны, отсюда и поле "связь с Комп.-клиенты"
Т.е. получается, что "Контакты" - является подтаблицей и для старой "Компании" (которая потом уберется), и для новой "Компании-клиенты"
План действий (с помощью Доп.действий таблицы "Компании"):
0) галочками/по фильтру выбирается список необходимых записей в т. Компании
1) создаём новую запись в т. "Компании-клиенты" и копируем нужные поля из текущей строки "Компании" в текущую (новую) строку "Компании-клиенты" - insert_query
2) в т. Контакты, поле "Связь с Компании-клиенты" - нужно заполнить значениями ID от свежей записи таблицы "Компании-клиенты" - для тех строк, которые относятся к текущей старой "Компании"
КАК это сделать ?
С пунктом 1) - проблем нет, как реализовать 2 ?
предполагаю, через sql запрос - но как это реализовать - в голове не складывается...
![](https://forum.clientbase.ru/public/style_images/master/icon_users.png)
![](https://forum.clientbase.ru/public/style_images/master/profile/default_large.png)
Доп.действия, модификация таблиц, подтаблиц
Автор baltgps, 04 мая 2015 14:59
Сообщений в теме: 6
#1
Отправлено 04 Май 2015 - 14:59
#2
Отправлено 05 Май 2015 - 09:43
Также как вы вставляли запись через insert_query, вы можете обновить записи в т. Контакты через функцию update_query по условию "поле связи с контрагентом равно текущему контрагенту"
Если непонятно и нужен конкретный пример кода, приведите здесь код своего вычисления, я его допишу.
Если непонятно и нужен конкретный пример кода, приведите здесь код своего вычисления, я его допишу.
#3
Отправлено 05 Май 2015 - 15:28
да, помогите, пожалуйста ![:)](http://clientbase.ru/forum/public/style_emoticons/default/smile.png)
1) таблица "Компании", поля:
... (стандартные служебные)
f3851 Название компании //текст
f5380 Форма собственности //связь, указывает на одну из строк другой таблицы "форма_собств_табл" - ООО, ОАО, ИП и т.п.
f3951 Значимость //список из трех строк
f3881 Комментарий //текст
... другие поля
2) таблица "Компании-клиенты", поля:
id ID //служебное
...
f6160 Название //текст
f6170 Форма собственности //как и в т. Компании, связь
f6200 Значимость //список, как и в т. Клиенты
... другие поля
3) таблица "Контакты" (подтаблица для "Компании", и для "Компании-клиенты"
... (служебные поля)
f4001 ФИО //текст
f4061 Компания //связь, Компании.Название компании
... (другие поля)
f6260 Связь с "Компании-клиенты" //связь с новой т.Компании-клиенты, по полю ID
---------------
Доп.действия - Вычисления (для таблицы "Компании"):
А вот "Форма собственности" - это поле-ссылка на другую таблицу - не работает, не копируется.
И, конечно же, как в текущих записях связанной подтаблицы "контакты" правильно заполнить поле-связь значением ID - тоже не выходит..
![:)](http://clientbase.ru/forum/public/style_emoticons/default/smile.png)
1) таблица "Компании", поля:
... (стандартные служебные)
f3851 Название компании //текст
f5380 Форма собственности //связь, указывает на одну из строк другой таблицы "форма_собств_табл" - ООО, ОАО, ИП и т.п.
f3951 Значимость //список из трех строк
f3881 Комментарий //текст
... другие поля
2) таблица "Компании-клиенты", поля:
id ID //служебное
...
f6160 Название //текст
f6170 Форма собственности //как и в т. Компании, связь
f6200 Значимость //список, как и в т. Клиенты
... другие поля
3) таблица "Контакты" (подтаблица для "Компании", и для "Компании-клиенты"
... (служебные поля)
f4001 ФИО //текст
f4061 Компания //связь, Компании.Название компании
... (другие поля)
f6260 Связь с "Компании-клиенты" //связь с новой т.Компании-клиенты, по полю ID
---------------
Доп.действия - Вычисления (для таблицы "Компании"):
$ins_data['Название'] = $line['Название компании']; $ins_data['Форма собственности'] = $line['Форма собственности']; $ins_data['Значимость'] = $line['Значимость']; $ins_data['Комментарий'] = $line['Комментарий']; insert_query($ins_data, "Компании-клиенты"); echo "<= Строки успешно добавлены";текстовые поля копируются без проблем, списки (Значимость) - тоже.
А вот "Форма собственности" - это поле-ссылка на другую таблицу - не работает, не копируется.
И, конечно же, как в текущих записях связанной подтаблицы "контакты" правильно заполнить поле-связь значением ID - тоже не выходит..
#4
Отправлено 05 Май 2015 - 16:11
$ins_data['Название'] = $line['Название компании']; $ins_data['Форма собственности'] = $line['Форма собственности']['ID']; // поля связи - это массивы, для копирования нужно брать ID связанной строки $ins_data['Значимость'] = $line['Значимость']; $ins_data['Комментарий'] = $line['Комментарий']; $new_id = insert_query($ins_data, "Компании-клиенты"); $upd_data['Связь с "Компании-клиенты"'] = $new_id; // заносим в поле связи id вновь добавленной записи update_query($upd_data, "Компании-клиенты", "`Компания`=".$line['ID']); // обновляем связанные строки echo "<= Строки успешно добавлены";
#5
Отправлено 05 Май 2015 - 16:34
Цитата
Ошибка системы.
Error generated:
/var/www/clientbase/include/functions2.php(93) : data_update()
/var/www/clientbase/include/functions1.php(537) : eval()'d code(8) : update_query()
/var/www/clientbase/include/functions1.php(537) : eval()
/var/www/clientbase/fields.php(1649) : calc_line()
Ошибка SQL запроса:
SELECT * FROM f_data470 WHERE `Компания`=455
Unknown column 'Компания' in 'where clause'
Error generated:
/var/www/clientbase/include/functions2.php(93) : data_update()
/var/www/clientbase/include/functions1.php(537) : eval()'d code(8) : update_query()
/var/www/clientbase/include/functions1.php(537) : eval()
/var/www/clientbase/fields.php(1649) : calc_line()
Ошибка SQL запроса:
SELECT * FROM f_data470 WHERE `Компания`=455
Unknown column 'Компания' in 'where clause'
Не очень понял update
Нам же требуется заполнить поле "Связь с компании-клиенты" в таблице "Контакты"..
Может быть, так должно быть?
update_query($upd_data, "Контакты", "`Компания`=".$line['Название компании']);
только кавычки надо расставить как-то правильно. Там же хитрость есть - то ли `, то ли ', то ли "
Ошибка SQL запроса:
SELECT * FROM f_data271 WHERE f4061=ТЕСТ-Компания-1
Unknown column 'ТЕСТ' in 'where clause'
Сообщение отредактировал baltgps: 05 Май 2015 - 16:54
#6
Отправлено 05 Май 2015 - 16:49
Да, я перепутал имя таблицы (точнее, скопировал вашу строку и забыл поменять имя). Разумеется, обновляться должна таблица "Контакты". Но что касается поля в условии, то никакой ошибки нет, т.к. в поле связи всегда хранится ID связанной записи, а не "Название компании" или что либо еще (поле из настроек служит только для отображения, на хранение оно никак не влияет):
update_query($upd_data, "Контакты", "`Компания`=".$line['ID']);
#7
Отправлено 05 Май 2015 - 17:20
CbCoder (05 Май 2015 - 16:49) писал:
...
РАБОТАЕТ!!!
Огромное Спасибо!
Итак, подведу итог - чтобы было всё рядом.
Имеем:
таблица Компании, и связанная подтаблица Контакты.
часть полей - текст, либо списки, часть - связи с другими (отдельными, вспомогательными) таблицами
Требуется:
перенести нужные нам данные из строки Компании в новую таблицу Компании-клиенты,
при этом привязать имеющиеся записи в Контакты к строке в новой таблице.
Решение:
посредством Дополнительных действий
//заполняем массив ins_data значениями из старой таблицы "Компания" $ins_data['Название'] = $line['Название компании']; //простой текст $ins_data['Форма собственности'] = $line['Форма собственности']['ID']; // поля связи - это массивы, для копирования нужно брать ID связанной строки. Здесь хранится ссылка на строку из вспомогательной таблицы. $ins_data['Значимость'] = $line['Значимость']; //список из нескольких строк, аналогично обычному тексту $ins_data['Комментарий'] = $line['Комментарий']; //текст, многострочный //теперь выполняем запрос на добавление строки-массива ins_data в новую таблицу Компании-клиенты, результат функции - это ID записи, запоминаем в переменной new_id $new_id = insert_query($ins_data, "Компании-клиенты"); //теперь обновляем записи в связанной подтаблице Контакты $upd_data['Связь с "Компании-клиенты"'] = $new_id; // заносим в поле связи id вновь добавленной записи update_query($upd_data, "Контакты", "`Компания`=".$line['ID']); // обновляем связанные строки. Новые_данные, таблица, условие. //на время отладки оставляем echo "<= Строки успешно добавлены";
Количество пользователей, читающих эту тему: 6
0 пользователей, 6 гостей, 0 анонимных