Добрый день.
Есть таблица "Заявка"
и подчиненная ей "Данные заявки", поле "Заявка" поле связи с табл."Заявка"
В табл. "Данные заявки" при смене ВСЕХ статусов в поле "Тест" на "готов" в табл. "Заявка" должно меняется поле "статус2"
но не меняет, никак не разберусь.
$lines = data_table("Данные заявки", "status=0", "all");
foreach ($lines as $data) // цикл
{
if ($data['тест']=="готов" and $data['ID'])
$line['Заявка']['Статус2'] = "заказ готов";
}
2
Сообщений в теме: 6
#1
Отправлено 19 Июль 2013 - 00:04
#2
Отправлено 19 Июль 2013 - 11:18
Во-первых, в запросе в первой строке нет фильтра по записям, связанным с основной:
$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");
Без этого проход будет по всем записям "Данные заявки", а не только тем, что связаны с текущей заявкой.
Во-вторых, в условии внутри цикла 'тест' с маленькой буквы, хотя выше вы пишете, что имя поля - "Тест" (регистр имеет значение). Основная причина несрабатывания скорее всего в этом.
Ну и по мелочи: 1) непонятно зачем в том же условии используется $data['ID'] - оно лишнее (хотя и не мешает) 2) по логике текущего кода Статус2 проставится если есть хоть одна запись с "Тест"="готов", хотя выше вы писали что надо чтобы ставилось при всех.
$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");
Без этого проход будет по всем записям "Данные заявки", а не только тем, что связаны с текущей заявкой.
Во-вторых, в условии внутри цикла 'тест' с маленькой буквы, хотя выше вы пишете, что имя поля - "Тест" (регистр имеет значение). Основная причина несрабатывания скорее всего в этом.
Ну и по мелочи: 1) непонятно зачем в том же условии используется $data['ID'] - оно лишнее (хотя и не мешает) 2) по логике текущего кода Статус2 проставится если есть хоть одна запись с "Тест"="готов", хотя выше вы писали что надо чтобы ставилось при всех.
#3
Отправлено 19 Июль 2013 - 11:50
CbCoder (19 Июль 2013 - 11:18) писал:
Во-первых, в запросе в первой строке нет фильтра по записям, связанным с основной:
$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");
Без этого проход будет по всем записям "Данные заявки", а не только тем, что связаны с текущей заявкой.
Во-вторых, в условии внутри цикла 'тест' с маленькой буквы, хотя выше вы пишете, что имя поля - "Тест" (регистр имеет значение). Основная причина несрабатывания скорее всего в этом.
$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");
Без этого проход будет по всем записям "Данные заявки", а не только тем, что связаны с текущей заявкой.
Во-вторых, в условии внутри цикла 'тест' с маленькой буквы, хотя выше вы пишете, что имя поля - "Тест" (регистр имеет значение). Основная причина несрабатывания скорее всего в этом.
CbCoder (19 Июль 2013 - 11:18) писал:
2) по логике текущего кода Статус2 проставится если есть хоть одна запись с "Тест"="готов", хотя выше вы писали что надо чтобы ставилось при всех.
#4
Отправлено 19 Июль 2013 - 11:59
Кстати, на картинке у вас только одна запись с "готов", код по идее должен был сработать.
Если же смотреть по всем, то при проходе цикла нужно проверять не на "равно", а на "не равно", и в случае если хоть одно такое выполняется - не заполнять Статус2, иначе - заполнять.
Если же смотреть по всем, то при проходе цикла нужно проверять не на "равно", а на "не равно", и в случае если хоть одно такое выполняется - не заполнять Статус2, иначе - заполнять.
#5
Отправлено 19 Июль 2013 - 15:01
CbCoder (19 Июль 2013 - 11:59) писал:
Кстати, на картинке у вас только одна запись с "готов", код по идее должен был сработать.
Если же смотреть по всем, то при проходе цикла нужно проверять не на "равно", а на "не равно", и в случае если хоть одно такое выполняется - не заполнять Статус2, иначе - заполнять.
Если же смотреть по всем, то при проходе цикла нужно проверять не на "равно", а на "не равно", и в случае если хоть одно такое выполняется - не заполнять Статус2, иначе - заполнять.
Спасибо все сделал,но работает только если меняется статус последней записи.
Если все записи статус "Не готов", а последняя "Заказ готов".
то поле 'Статус2' вычисляет "Заказ готов"
Статус2 -текстовое поле
вычисление при изменении поля "тест"
$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all"); foreach ($lines as $data) // цикл { if ($data['тест']!="готов"){ $line['Заявка']['Статус2'] = "Не готов"; } else{ $line['Заявка']['Статус2'] = "Заказ готов"; } }
Сообщение отредактировал maxim: 19 Июль 2013 - 15:08
#6
Отправлено 19 Июль 2013 - 15:23
$no_ready = 0; $lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all"); foreach ($lines as $data) // цикл { if ($data['тест']!="готов") $no_ready = 1; // если хоть одна запись будет без "готов", переменная $no_ready обратится в 1 } if ($no_ready) $line['Заявка']['Статус2'] = "Не готов"; else $line['Заявка']['Статус2'] = "Заказ готов";
#7
Отправлено 19 Июль 2013 - 15:31
CbCoder (19 Июль 2013 - 15:23) писал:
$no_ready = 0; $lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all"); foreach ($lines as $data) // цикл { if ($data['тест']!="готов") $no_ready = 1; // если хоть одна запись будет без "готов", переменная $no_ready обратится в 1 } if ($no_ready) $line['Заявка']['Статус2'] = "Не готов"; else $line['Заявка']['Статус2'] = "Заказ готов";
Спасибо большое!!!!
Все работает.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных