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


Связь таблиц


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

#1 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 29 Июль 2013 - 11:43

Добрый день!
Из таблицы совместной работы создается счет доп.действием:
if ( ($line['Номер счета']!="0" ) or (empty($line['Менеджер СР'])))
{
  echo "<script>alert('По данной совместной работе уже создан счет или поле менеджер СР пустое')</script>";
}
else
{
$schet['Тариф']=$line['Тариф']['ID'];
$schet['Сумма']=$line['Сумма итого'];
$schet['На кого']=$line['Контрагент']['ID'];
$schet['Сумма менеджера']=$line['Сумма менеджера'];
$schet['Менеджер СР']=$line['Менеджер СР'];
$schet['Сумма менеджера СР']=$line['Сумма менеджера СР'];
$schet['Процент менеджера']=$line['Процент менеджера'];
$schet['Процент менеджера СР']=$line['Процент менеджера СР'];
$schet['Номер СР'] = $line['Номер'];
$new_id = insert_query($schet,"Счета");
$schet = data_table("Счета","id=".$new_id);
$line['Номер счета'] = $schet['Номер'];
echo "<script>location.href='".$config["site_root"]."/view_line.php?table=43&line=".$new_id."&edit_mode&back_url=".$base64_current_url."'</script>";
}

Дополнение: В таблице СРМ есть поле "Номер счета", которое заполняется номером созданного счета, а в таблице "Счета" есть поле "Номер СР", которое заполняется номером СРМ


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

if (($line['СР завершена'] == "Да") or ($line['СР завершена'] == "Отклонено") )
{
$data['СР завершена'] = $line['СР завершена'];
insert_query($data,"Счета");
}

Проблема в том,что создается новая запись.
Насколько я понимаю, нужно привязать 2 таблицы между собой каким-нибудь полем типа "Связь".
Я вот думаю,а если я сделаю поле "Номер счета" в первой таблице связью с полем "Номер" в "Счете", а в счете сделаю поле
"Номер СР" связью с полем "Номер" совместной работы, то как нужно прописать дополнительное действие?..
Тогда наверное и вычисление будет работать,если прописать
$data['СР номер'] = $ID;

Сообщение отредактировал Dinara: 29 Июль 2013 - 14:30


#2 CbCoder

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

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

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

$line['Номер счета'] = $schet['ID'];

В полях связи хранятся ID, об этом уже говорилось ранее.

#3 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 29 Июль 2013 - 18:56

Подскажите, как быть...
if (($line['СР завершена'] == "Да") or ($line['СР завершена'] == "Отклонено") )
{
$data['СР номер'] = $ID;
$data['СР завершена'] = $line['СР завершена'];
insert_query($data,"Счета");
}

Создала в таблице 1 поле "Счета номер" связь с id таблицы 2
http://take.ms/rajg1 Видим счет, здесь, что связь с номером 240 (таблица 2). id у таблицы 1 - 221
У второй таблицы поле "СР номер" связь с id таблицы 1
http://monosnap.com/...Bd7WZQyvYHYgtF/ видим, что id самой таблицы 240, а связь с 221. То есть все корректно.

Теперь меняем поле "СР завершена" с помощью доп действия и значение поля должно скопироваться.
Но, почему-то создается новая строка...
http://take.ms/MVSfpG

Что я не так делаю? Как мне не добавить новую строку,а добавить туда, где связаны эти 2 поля между собой?

Сообщение отредактировал Dinara: 30 Июль 2013 - 07:05


#4 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 30 Июль 2013 - 07:36

П.с поле "СР завершена" в первой таблице-список,во второй-текст..это так,на всякий)

#5 CbCoder

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

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

Отправлено 30 Июль 2013 - 09:17

Цитата

Но, почему-то создается новая строка...

Естественно, что у вас будет создаваться новая строка, если вы ее сами же добавляете, через функцию insert_query:

insert_query($data,"Счета");

Для обновления записей служит функция update_query, где как раз можно указать условие связи двух записей:

if (($line['СР завершена'] == "Да") or ($line['СР завершена'] == "Отклонено") )
{
  $data['СР номер'] = $ID;
  $data['СР завершена'] = $line['СР завершена'];
  update_query($data,"Счета","id='{$line['Номер счета']}'"); // указываем, какую запись обновлять - "id='{$line['Номер счета']}'"
}

Кстати, не очень понял, зачем вам заполнять при этом $data['СР номер'] - это можно делать сразу при добавлении счета, а не во время обновления. Эту строку можно убрать.

#6 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 30 Июль 2013 - 09:41

ох,точно,update..

Не срабатывает. У меня id второй таблицы находится в поле "Счета номер", поменяла поэтому код на
if (($line['СР завершена'] == "Да") or ($line['СР завершена'] == "Отклонено") )
{

  $data['СР завершена'] = $line['СР завершена'];
  update_query($data,"Счета","id='{$line['Счета номер']}'");
}
Соответственно,изменила теперь поле "СР завершена"
http://take.ms/j17R7J
Но во второй таблице значение не подставилось..
http://take.ms/akNyBE

#7 CbCoder

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

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

Отправлено 30 Июль 2013 - 09:57

update_query($data,"Счета","id='{$line['Счета номер']['ID']}'"); // ссылаемся на ID 

Так должно сработать.

Хотя, на самом деле, есть более простой способ обновления данных в связанной записи, без update_query:

if (($line['СР завершена'] == "Да") or ($line['СР завершена'] == "Отклонено") )
{
  $line['Счета номер']['СР завершена'] = $line['СР завершена'];
}


#8 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

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

if (($line['СР завершена'] == "Да") or ($line['СР завершена'] == "Отклонено") )
{
  $line['Счета номер']['СР завершена'] = $line['СР завершена'];
}

Дааа.действительно, так просто оказывается))это наверное самый лучший вариант)))





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

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