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


Не обновляется поле связи

поле связи обновление

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

#1 zakoss

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений
  • Пол:Мужчина

Отправлено 04 Март 2015 - 19:34

Есть таблица Участники и таблица Места. В таблице Участники есть поле связи П-1 с таблицей Места > поле Сокращения
Нужно с помощью данных одного участника таблицы обновлять поле связи П-1 другого участника этой же таблицы.

Пытаюсь реализовать это следующим образом:

Через условие (когда поле БТ-1 = 1), по значению поля Логин спонсора одного участника нахожу в таблице запись по логину с таким же значением и значению поля БТ-1 = 1 (это поле f4320),
формирую массив полей этой записи. Затем, исходя из двух условий пытаюсь обновить поле П-1 исходного участника.
Данное вычисление висит на поле БТ-1 и настроено на изменение значения этого поля.

Ничего не выходит, такое ощущение что вычисление вовсе не срабатывает...

if($line['БТ-1'] == 1) { //условие выбора места в трёхместке
  //Проверяем, где стоит спонсор
  //Выбираем в таблице массив полей записи спонсора
  $sponsor = data_select_array(42, "status=0 AND f4320=1 AND f1470='",$line['Логин спонсора'],"'");
  $row_sp = sql_fetch_assoc($sponsor); //копируем его данные в массив
    //в каком месте матрицы стоит спонсор
	    if($row_sp['П-1']['ID'] == 1) {//если спонсор стоит тут
		    //обновляем связанное поле новым значением
		    data_update(42, array('f4730' => 2), "id=", $line['ID']);
	    }
	    if($row_sp['П-1']['ID'] == 2) {//а если тут
		    //то обновляем связанное поле
		    data_update(42, array('f4730' => 3), "id=", $line['ID']);
	    }
}

Наверняка я ге то ошибся. Помогите пожалуйста настроить правильно...
----------------------------------
E-mail: yagool@rambler.ru

#2 CbCoder

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

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

Отправлено 05 Март 2015 - 10:00

Визуально вроде нет ошибок, по логике не знаю.

#3 zakoss

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений
  • Пол:Мужчина

Отправлено 10 Март 2015 - 07:54

Странно, но вычисление выше прекрасно работает с внешнего обработчика. Уверен, очередной глюк КБ.
У нас купленная лицензия, но служба поддержки (а есть ли она вообще?) систематически отмахивается от решения вопроса, поэтому надежда только на CbCoder и форумчан...

Продолжаю тему с типичной проблемой - необоснованно не хочет работать вычисление. Подробнее:

В таблице Семёрки имею набор полей: М1, М-2, М-3, М-4, М-5, М-6, М-7 (поля связи) по событию заполнения только всех должно срабатывать вычисление (вычисление на изменение, поле связь, висит на поле М-7), создающее в этой же таблице две записи с указанными полями, обновляющее записи в таблице Участники по указанным полям, а затем удаляющее эту (исходную) запись.

//Как только последнее поле М-7 будет заполнено, срабатывает вычисление...
if(($line['М-1']['ID'] !== 0) && ($line['М-2']['ID'] !== 0) && ($line['М-3']['ID'] !== 0) && ($line['М-4']['ID'] !== 0) && ($line['М-5']['ID'] !== 0) && ($line['М-6']['ID'] !== 0) && ($line['М-7']['ID'] !== 0)) {
  
	//Присваиваемые поля - типичны поля связи с той же таблицей...

	//Создаём первую новую матрицу-семёрку в той же таблице и пишем в неё данные левого крыла старой матрицы
	$data = Array();
	$matr_l['f4550'] = $line['М-2'];//полем связи по логину присваиваем ID создателя матрицы полю связи по ID...
	$matr_l['f4570'] = $line['М-2'];//2-е место ставим на первое
	$matr_l['f4580'] = $line['М-4'];//4-е место ставим на второе
	$matr_l['f4590'] = $line['М-5'];//5-е место ставим на третье
	$matr_l['f4720'] = $line['Тип программы'];//присваиваем ID Программы
	$matr_l['ID'] = data_insert(320, EVENTS_ENABLE, $matr_l);
	//Создаём вторую новую матрицу-семёрку в той же таблице и пишем в неё данные правого крыла старой матрицы
	$data = Array();
	$matr_r['f4550'] = $line['М-3'];//присваиваем ID создателя матрицы
	$matr_r['f4570'] = $line['М-3'];//3-е место ставим на первое
	$matr_r['f4580'] = $line['М-6'];//6-е место ставим на второе
	$matr_r['f4590'] = $line['М-7'];//7-е место ставим на третье
	$matr_r['f4720'] = $line['Тип программы'];//присваиваем ID Программы
	$matr_r['ID'] = data_insert(320, EVENTS_ENABLE, $matr_r);
  
	//Переписываем поля М-?, IDТ-?, IDC-? Участников левого крыла
	//Первый Участник
	$data = Array();
	//Обновляем поля М-? и IDС-? в записи 1-го Участника
	if($line['Тип программы'] == 1) {
		$data['f4730'] = 1;
		$data['f4930'] = 0;
		$data['f5020'] = $matr_l['ID'];
	} elseif($line['Тип программы'] == 2) {
		$data['f4740'] = 1;
		$data['f4940'] = 0;
		$data['f5030'] = $matr_l['ID'];
	} elseif($line['Тип программы'] == 3) {
		$data['f4750'] = 1;
		$data['f4950'] = 0;
		$data['f5040'] = $matr_l['ID'];
	} elseif($line['Тип программы'] == 4) {
		$data['f4760'] = 1;
		$data['f4960'] = 0;
		$data['f5050'] = $matr_l['ID'];
	} elseif($line['Тип программы'] == 5) {
		$data['f4770'] = 1;
		$data['f4970'] = 0;
		$data['f5060'] = $matr_l['ID'];
	} elseif($line['Тип программы'] == 6) {
		$data['f4780'] = 1;
		$data['f5070'] = $matr_l['ID'];
	} elseif($line['Тип программы'] == 7) {
		$data['f4790'] = 1;
		$data['f5080'] = $matr_l['ID'];
	}
	data_update(42, EVENTS_ENABLE, $data, "`id`='", $line['М-2'], "'");
  
	//Для краткости урежем остальной, повторяющийся для других участников, код...
	//*******************************************************************************************************
	//*******************************************************************************************************
	//*******************************************************************************************************
		  
	//удаляем поделившуюся матрицу таблицы Семёрки
	data_delete(320, EVENTS_ENABLE, "`id`='", $line['ID'], "'");
}

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


					
					<br />
					<p class= Сообщение отредактировал zakoss: 10 Март 2015 - 08:25

----------------------------------
E-mail: yagool@rambler.ru

#4 CbCoder

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

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

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

$matr_l['f4550'] = $line['М-2'];

Если M-2 - это поле связи, то обращение к нему некорректное. Поля связи в $line разворачиваются в массив, поэтому логичнее писать $line['М-2']['ID'] или $line['М-2']['raw'] (raw - "сырое" значение в БД).





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

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