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


Запуск вычисления с периодом в 30 минут

запуск вычисления с периодом

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

#1 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 07:04

В т. Заявки на поле Статус "висит" вычисление :

if ($line['Статус']=="В ожидании")
{
	$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	if(!$row) {
		data_update(240, array('f6130' => 0), "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID']); // присваиваем значение 0 полю Флаг по условиям
		$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	  }
	  // обновляем поле Исполнитель в т. Заявки при положительном результате
	  $line['Исполнитель']['ID'] = $row['id'];
	  // обновляем Флаг=1 по итогу
	  data_update(240, array('f6130' => 1), "id=", $row['id']);
}


мне необходим "дёргать" Cron-ом все записи в т. Заявки со значением поля Статус == В ожидании с периодом в 30 минут. Подскажите пожалуйста вычисление для Cron-а...

Сообщение отредактировал All_ex74: 20 Июнь 2014 - 07:05


#2 CbCoder

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

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

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

Что значит "дёргать"? Для какой цели? Поясняйте сразу всё.

#3 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 11:06

Просмотр сообщенияCbCoder (20 Июнь 2014 - 10:30) писал:

Что значит "дёргать"? Для какой цели? Поясняйте сразу всё.

Значит, запускать данное вычисление. Само вычисление настроено на изменение в базе. Cron каждые 30 минут должен пробежаться по записям в т. Заказчики и запустить данное вычисление только в записях с полем Статус ==В ожидании...

#4 CbCoder

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

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

Отправлено 20 Июнь 2014 - 11:34

Добавьте тогда цикл по таблице Заявки с условием "Статус==В ожидании" и вставьте код вычисления в него. Естественно, с заменой $line на возвращаемую в цикле строку.

#5 CbCoder

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

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

Отправлено 20 Июнь 2014 - 11:38

На всякий случай, для непрограммистов: цикл по таблице - это запрос к таблице с последующим проходом по возвращаемым записям через цикл while. Примеры на форуме и в документации должны быть.

#6 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 11:57

Просмотр сообщенияCbCoder (20 Июнь 2014 - 11:34) писал:

Добавьте тогда цикл по таблице Заявки с условием "Статус==В ожидании" и вставьте код вычисления в него...

В него - это в вычисление Cron-а?

#7 CbCoder

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

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

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

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

#8 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 12:19

Вот так?

$zvka = data_select_array(130, "`status`=0 AND `f5620`='В ожидании'"); // где 130 - id т. Заявки, а f5620 - id поля Статус
foreach ($zvka as $data) // цикл по набору записей
{

                        // а сюда поместить вычисление?

}



#9 CbCoder

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

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

Отправлено 20 Июнь 2014 - 12:29

Запрос data_select_array возвращает одну запись, а не массив. Используйте data_select с проходом результата в цикле while:

$result = data_select(130, "`status`=0 AND `f5620`='В ожидании'"); // где 130 - id т. Заявки, а f5620 - id поля Статус
while ($row = sql_fetch_assoc($result))
{
  //
}

По сути это вариация стандартного прохода, описанного в документации PHP по MySQL, только с нашими вариантами функций.

#10 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 12:57

Спасибо за подсказки. Сделал как говорили:

$result = data_select(130, "`status`=0 AND `f5620`='В ожидании'"); // выборка строк с условием из т. Заявки
while ($row = sql_fetch_assoc($result)) // цикл по выбранным из т. Заявки записям
{
	$row_isp = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // выборка из т. Исполнители по условиям. Присваиваем массив значений полей переменной
	if(!$row_isp) {
		data_update(240, array('f6130' => 0), "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID']); // присваиваем значение 0 полю Флаг по условиям
		$row_isp = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	  }
	  // обновляем поле Исполнитель в т. Заявки при положительном результате
	  data_update(130, $row['Исполнитель']['ID'] = $row_isp['id']);
	  // обновляем Флаг=1 в т. Исполнители по итогу
	  data_update(240, array('f6130' => 1), "id=", $row_isp['id']);
}


проверьте пожалуйста...

Сообщение отредактировал All_ex74: 20 Июнь 2014 - 13:12


#11 CbCoder

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

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

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

$line то почему везде не заменили? В кроне нет переменной $line (он не в какой-то определенной таблице выполняется, в отличии от вычислений).

А там где заменили (вижу $row['Исполнитель']['ID']), во-первых запрос data_select возвращает строки с внутренними именами (f111), во-вторых он одноуровневый, там поля связи не раскрываются.

#12 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 13:24

Просмотр сообщенияCbCoder (20 Июнь 2014 - 13:22) писал:

$line то почему не заменили? В кроне нет переменной $line (он не в какой-то определенной таблице выполняется, в отличии от вычислений).

да, пропустил...

#13 CbCoder

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

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

Отправлено 20 Июнь 2014 - 13:28

Я там дописал еще одну строку, уточняющую.

#14 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 13:34

$result = data_select(130, "`status`=0 AND `f5620`='В ожидании'"); // выборка строк с условием из т. Заявки
while ($row = sql_fetch_assoc($result)) // цикл по выбранным из т. Заявки записям
{
	$row_isp = data_select_array(240, "`status`=0 AND `f3450`=", $row['Город']['ID'], " AND `f4690`=", $row['Тип услуги']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // выборка из т. Исполнители по условиям. Присваиваем массив значений полей переменной
	if(!$row_isp) {
		data_update(240, array('f6130' => 0), "`status`=0 AND `f3450`=", $row['Город']['ID'], " AND `f4690`=", $row['Тип услуги']['ID']); // присваиваем значение 0 полю Флаг по условиям
		$row_isp = data_select_array(240, "`status`=0 AND `f3450`=", $row['Город']['ID'], " AND `f4690`=", $row['Тип услуги']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	  }
	  // обновляем поле Исполнитель в т. Заявки при положительном результате
	  data_update(130, $row['Исполнитель']['ID'] = $row_isp['id']);
	  // обновляем Флаг=1 в т. Исполнители по итогу
	  data_update(240, array('f6130' => 1), "id=", $row_isp['id']);
}


где Город и Тип услуги - поля в т. Заявки, связанные с т. Исполнители
а 130 - id т. Заявки, 240 - id т. Исполнители

вроде всё, правильно сейчас? в единственном сомневаюсь - $row или $result ?

Сообщение отредактировал All_ex74: 20 Июнь 2014 - 13:36


#15 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 13:52

поместил это вычисление в Cron и попробовал отработать - выдало ошибку Cron (задание Cron выделено красным в общем списке)

...и после перезагрузки страницы вот это:

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later

Сообщение отредактировал All_ex74: 20 Июнь 2014 - 13:57


#16 CbCoder

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

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

Отправлено 20 Июнь 2014 - 14:03

Вы читали, что я дописывал?

Просмотр сообщенияCbCoder (20 Июнь 2014 - 13:28) писал:

Я там дописал еще одну строку, уточняющую.

Просмотр сообщенияCbCoder (20 Июнь 2014 - 13:22) писал:

А там где заменили (вижу $row['Исполнитель']['ID']), во-первых запрос data_select возвращает строки с внутренними именами (f111), во-вторых он одноуровневый, там поля связи не раскрываются.


#17 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 14:17

$result = data_select(130, "`status`=0 AND `f5620`='В ожидании'"); // выборка строк с условием из т. Заявки
while ($row = sql_fetch_assoc($result)) // цикл по выбранным из т. Заявки записям
{
	    $row_isp = data_select_array(240, "`status`=0 AND `f3450`=", $row['f4790'], " AND `f4690`=", $row['f1720'], " AND `f3530`='Свободна' AND `f6130`='0'"); // выборка из т. Исполнители по условиям. Присваиваем массив значений полей переменной
	    if(!$row_isp) {
			    data_update(240, array('f6130' => 0), "`status`=0 AND `f3450`=", $row['f4790'], " AND `f4690`=", $row['f1720']); // присваиваем значение 0 полю Флаг по условиям
			    $row_isp = data_select_array(240, "`status`=0 AND `f3450`=", $row['f4790'], " AND `f4690`=", $row['f1720'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
		  }
		  // обновляем поле Исполнитель в т. Заявки при положительном результате
		  data_update(130, $row['f4670'] = $row_isp['id']);
		  // обновляем Флаг=1 в т. Исполнители по итогу
		  data_update(240, array('f6130' => 1), "id=", $row_isp['id']);
}


где f4790 - поле Город, f1720 - поле Тип услуги, а f4670 - поле Исполнитель... надеюсь я вас правильно понял?

#18 CbCoder

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

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

Отправлено 20 Июнь 2014 - 14:27

Да, правильно.

#19 CbCoder

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

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

Отправлено 20 Июнь 2014 - 14:30

Только этот фрагмент не понял я:

data_update(130, $row['f4670'] = $row_isp['id'])

Что за приравнивание одного элемента массива другому в функции запроса? Опечатка? Т.к. запросе ниже все верно. Должно быть по аналогии.

#20 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 20 Июнь 2014 - 17:17

$result = data_select(130, "`status`=0 AND `f5620`='В ожидании'"); // выборка строк с условием из т. Заявки
while ($row = sql_fetch_assoc($result)) // цикл по выбранным из т. Заявки записям
{
		$row_isp = data_select_array(240, "`status`=0 AND `f3450`=", $row['f4790'], " AND `f4690`=", $row['f1720'], " AND `f3530`='Свободна' AND `f6130`='0'"); // выборка из т. Исполнители по условиям. Присваиваем массив значений полей переменной
		if(!$row_isp) {
				data_update(240, array('f6130' => 0), "`status`=0 AND `f3450`=", $row['f4790'], " AND `f4690`=", $row['f1720']); // присваиваем значение 0 полю Флаг по условиям
				$row_isp = data_select_array(240, "`status`=0 AND `f3450`=", $row['f4790'], " AND `f4690`=", $row['f1720'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
		  }
		  // обновляем поле Исполнитель в т. Заявки при положительном результате
		  data_update(130, array('f4670' => $row_isp['id']), "id=", $row['id']);
		  // обновляем Флаг=1 в т. Исполнители по итогу
		  data_update(240, array('f6130' => 1), "id=", $row_isp['id']);
}
echo 'Done';


Так?.. наверное уж точно)

Но что то не функционирует и выделено красным в общем списке задание в Cron


					
					<br />
					<p class= Сообщение отредактировал All_ex74: 20 Июнь 2014 - 17:29






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

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