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


Копирование данных между таблицами


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

#1 alexols

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

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

Отправлено 21 Июнь 2016 - 09:14

Приветствую коллеги, подскажите плиз что не так.
В таблице источнике текстовые поля, в таблице приемнике поле типа связь по полю Название, с таблицами Тип и Объект
Сначала сделал так :
$datatab ['Тип']=$line['Тип'];
$datatab ['Объект']=$line['Объект'];
$datatab_id = insert_query($datatab, "МояТаблица");
Поля остались пустыми что логично.
Потом попытался сделать так:

$res = data_select(410, "f6430=",$line['Тип']);
$row = sql_fetch_array($res);
$datatab_id ['Тип'] = $row['id'];
echo $datatab_id ['Тип'];

$res = data_select(420, "f6490=",$line['Объект']);
$row = sql_fetch_array($res);
$datatab_id ['Объект'] = $row['id'];
$datatab_id = insert_query($datatab, "МояТаблица");
410 и 420 это таблицы с которыми связь в полях Тип и Объект у таблицы МояТаблица
http://prntscr.com/biz8gh
http://prntscr.com/biz8rn
Результат отритцательный, при этом отладка показывает что в связанных таблицах поля находятся.

#2 CbCoder

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

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

Отправлено 21 Июнь 2016 - 17:42

Цитата

$res = data_select(410, "f6430=",$line['Тип']);

Если $line['Тип'] - это текстовое поле, почему оно не в кавычках внутри запроса? Без кавычек оно будет приведено к числу.

$res = data_select(410, "f6430='",$line['Тип'],"'"); // текстовое значение в запросе в кавычках


#3 alexols

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

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

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

Дело в том что echo $datatab_id ['Тип'] показывает что значение найдено, по какой то причине не отрабатывает insert_query

Сообщение отредактировал alexols: 22 Июнь 2016 - 10:21


#4 CbCoder

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

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

Отправлено 22 Июнь 2016 - 10:25

У вас опечатка видимо. Вы заполняете массив $datatab_id, а вставляете через insert_query другой массив - $datatab. Очевидно, что по логике заполняться должен $datatab, а $datatab_id - это то что функция возвратит в итоге (у вас она как раз и заполняется в конце)

#5 alexols

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

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

Отправлено 22 Июнь 2016 - 10:59

Точно, опечатка, спасибо !!!!

#6 Oleg

    Новичок

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

Отправлено 29 Август 2016 - 16:31

Добрый день,коллеги. Думаю,посмеётся от души,но уже кончаются нервы второй день бьюсь над простым кодом:

Есть 2 таблица: Травмированные и Клиенты. Нужно ,чтобы при смене поля на определённый статус из списка(поле типа со списком) в таблице Клиенты, в Таблице Травмированные автоматически появлялась ссылка(в идеале) на данного клиента в определенном поле или хотя бы заполнялась строка в таблице травмированные с ФИО записи,где меняется статус. Буду очень благодарен.

#7 Oleg

    Новичок

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

Отправлено 30 Август 2016 - 17:49

if (($line['Кем приходится травмированному'] == "Матерью")	 
{
$data['Мать'] = $line['Фамилия'] && $line['Имя'] && $line['Отчество'];
  insert_query($data,"Травмированные","'id'=$ID");
  update_query($data,"Травмированные","'id'=$ID");
}
    elseif($line['Кем приходится травмированному'] ==  "Отцом")
    {
    $data['Отец'] = $line['Фамилия'];
    insert_query($data,"Травмированные","`id`=ID");
    update_query($data,"Травмированные","`id`=ID");
    }
Создает в таблице новую запись и добавляет Фамилию всем записям в данной таблице а не конкретной.
Как добиться того,чтобы не создавал новую запись,а просто добавлял в определенную строку в уже существующей записи. При этом запись из таблицы Травмированные связана с другим полем из таблица Клиенты. Вычисление сохранено в таблице Клиенты
http://storage1.stat..._c5cb38a994.png
http://storage1.stat..._4ef0ba50ba.png

#8 CbCoder

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

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

Отправлено 31 Август 2016 - 09:29

Все проще:

if ($line['Кем приходится травмированному'] == "Матерью")	  
{
    $line['Травмированный']['Мать'] = $line['Фамилия']." ".$line['Имя']." ".$line['Отчество'];
}
elseif($line['Кем приходится травмированному'] == "Отцом")
{
    $line['Травмированный']['Отец'] = $line['Фамилия']." ".$line['Имя']." ".$line['Отчество'];
}

Во-первых, тут можно без запросов обойтись благодаря полю связи, во-вторых сами запросы у вас, мягко сказать, с потолка взятые. Если уж надо было делать через запросы, то код был бы такой:

if ($line['Кем приходится травмированному'] == "Матерью")	  
{
    $data['Мать'] = $line['Фамилия']." ".$line['Имя']." ".$line['Отчество'];
    update_query($data,"Травмированные","id=".$line['Травмированный']['ID']);
}
elseif($line['Кем приходится травмированному'] ==  "Отцом")
{
    $data['Отец'] = $line['Фамилия'];
    update_query($data,"Травмированные","id=".$line['Травмированный']['ID']);
}

Но как уже сказал выше, запросы тут необязательны. Поэтому лучше используйте первый вариант.

Да, и еще конкатенация у вас какая то странная. В PHP используется точка для нее, а не "&&" - это логический оператор "И". См. код.

#9 Oleg

    Новичок

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

Отправлено 31 Август 2016 - 11:59

Спасибо огромное,сделал как вы сказали,получилось! В заранее же предупредил,что пока только начинаю что-то писать сам и доходит до смешного)
А возможно ли сделать так,чтобы эти данные(ФИО) которые копируются при сохранении были как ссылки на клиентов из карточки таблицы " Травмированные" ?
Буду очень благодарен.

#10 CbCoder

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

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

Отправлено 31 Август 2016 - 14:14

Да, тогда код еще проще:

if ($line['Кем приходится травмированному'] == "Матерью")		
{
    $line['Травмированный']['Мать'] = $line['ID'];
}
elseif ($line['Кем приходится травмированному'] == "Отцом")
{
    $line['Травмированный']['Отец'] = $line['ID'];
}

Разумеется при этом надо поменять тип полей Мать и Отец на поля связи с клиентом. Поясняю: в полях связи хранится ID записи для формирования ссылки на нее, именно поэтому в коде копируется текущий ID.

#11 Oleg

    Новичок

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

Отправлено 31 Август 2016 - 15:11

Спасибо огромное,всё работает так как надо!!! Не могли бы вы подсказать еще по одному моменту : Работа с одной таблицей ,в зависимости от статуса поля со списком(например,пол - м / ж), другое поле со списком ( в этой же таблице) отображает определенные строчки из списка,т.е. не все которые есть.
Необходимость такая : например,ставишь в поле со списком: пол - м,и в этой же записи в другом поле со списком отображаются для выбора только список из родственников,принадлежащих женскому полу(мать,жена и т.п.).

#12 CbCoder

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

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

Отправлено 31 Август 2016 - 16:08

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

#13 Oleg

    Новичок

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

Отправлено 05 Сентябрь 2016 - 21:29

Просмотр сообщенияCbCoder (31 Август 2016 - 16:08) писал:

Со списками так не получится, они статичные. Это можно сделать только для полей связи, если они к примеру оба указывают на одну таблицу-справочник, где первое поле - пол, а второе - тип родственника. Тогда во втором поле связи в настройках указываете в качестве фильтра первое поле.
Сделал,как вы советовали,но работает не совсем корректно: при выборе определенного поля(либо тип пола,либо тип родственника) и сохранения записи в таблице создаётся запись в таблице "справочники". При этом поставил второе поле (связанное с типом родственника) фильтр по полю "Пол" (связанное с полем пол соответственно )и только от этого нет). Нужно писать вычисление? И как при этом таблицу справочники с этими полями сделать невидимой?(Чтобы её не было в режиме добавления записей).

#14 CbCoder

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

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

Отправлено 06 Сентябрь 2016 - 09:33

Вы что-то не то делаете явно. Никаких вычислений там не требуется, все делается элементарно. Прикрепите скриншоты что ли как выбираете значения в полях, такое ощущение что вы жмете на добавление (зеленый плюс) вместо выбора значения, при простом выборе естественно никаких созданий записи в справочнике само по себе не произойдет.

#15 CbCoder

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

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

Отправлено 06 Сентябрь 2016 - 10:03

Вот не поленился, специально для вас создал тестовую конфигурацию с примером: https://ftest.clientbase.ru (admin/admin)

Можете сами убедится что ни одного вычисления там нет, и схема с фильтром работает.

#16 Oleg

    Новичок

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

Отправлено 06 Сентябрь 2016 - 18:05

Спасибо! У меня так же всё работало,просто в моей голове это по-другому работало,но и так подойдёт) Скрою таблицу " Справочники" от менеджеров.

Хотел ещё спросить возможно ли такое или нет : решение проблемы,которое вы мне подсказали 31 августа(ссылка на родственника((написанный вами код в этой теме чуть выше)) ; бывает такое,что в семье несколько,например,братьев,и тогда в таблице " Родственники" если выбираешь два человека со статусом Брат,то сохраняется в ссылке у травмированного последний сохранённый,а первый пропадает. Возможно ли,чтобы просто появлялась вторая запись со ссылкой напротив Родственника в таблице " Травмированный" или нет? Я пока решил проблему так: просто создал дополнительные статусы : Брат2,Сестра 3 и Внук 4 и т.п.

#17 CbCoder

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

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

Отправлено 07 Сентябрь 2016 - 09:05

В этом случае надо создать подтаблицу Родственники у Травмированных, и добавлять всех родственников туда, с указанием родства. Это даже изначально более лучший вариант чем несколько полей Мать,Отец и т.д. Естественно код надо будет поменять, он усложнится. Вместо обновления связанных полей должен быть запрос на добавление записи в подтаблицу.





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

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