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


Очищаем от старых записей таблицу - вычисление для Cron

cron

В теме одно сообщение

#1 z0ddak

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина
  • Город:Барнаул
  • Интересы:разработка

Отправлено 07 Май 2017 - 06:00

Задача была убирать все записи определённого пользователя, которые старше 1 часа. Составил конструкцию, в которой по условию сверки двух временных штампов происходит изменение статуса записи. В принципе, всё просто. Обходим циклом по таблице и по условию меняем статус, но чего то не работает.
В кроне другие вычисления прекрасно отрабатывают, а это ни в какую.. Может кто подскажет способ спрятать условие в сам запрос и "укоротить код". Спасибо.

// Выбираем из таблицы активные платежи со статусом -В ожидании- и сверяем время - когда добавлены
$result = data_select(330, "`status`=0 and `f5690`=0"); // Поле f5690 - Флаг статуса: 0, 1 или 2 (В ожидании, Оплачен, Не проведён)
while ($row = sql_fetch_assoc($result)) {

	// вычисляем время...
	$dt = date("d-m-y h:i:s", strtotime($row['add_time']));
	$dtt = date("d-m-y h:i:s");
	$dt_strok  = explode(' ',$dt);
	$dt_data   = explode('.',$dt_strok[0]);
	$dt_time   = explode(':',$dt_strok[1]);
	$dtt_strok = explode(' ',$dtt);
	$dtt_data  = explode('.',$dtt_strok[0]);
	$dtt_time  = explode(':',$dtt_strok[1]);
  
	$timestamp_dt = mktime($dt_time[0],$dt_time[1],$dt_time[2],$dt_data[0],$dt_data[1],$dt_data[2]);
	$timestamp_dtt = mktime($dtt_time[0],$dtt_time[1],$dtt_time[2],$dtt_data[0],$dtt_data[1],$dtt_data[2]);
	$diff = $timestamp_dtt - $timestamp_dt;

		// тут считаем минуты, часы
	$secund = $diff / 60;
	$minut  = $secund / 60;
	$chasov = $minut / 60;
  
	// Если прошло уже более 1 часа - перемещаем в архив и ставим статус -Не проведено-
	if ($chasov > 1) {
  
		$data = Array();
		$data['f5660']  = "Не проведено";
		$data['status'] = 1;
		data_update(330, EVENTS_ENABLE, $data, "`id`=",$row['id']);
	 }
}

P.S.: В верхнем примере кода проблема была в запросе data_select - не хватало кавычек у значения поля: `f5690`='0' , а так всё работало.
Но немного повозившись, переписал свой "говнокод" в более приличную конструкцию:

// Выбираем из таблицы активные платежи со статусом -В ожидании- и сверяем время - когда добавлены
$time_later = form_eng_time(date("d.m.Y H:i", time()-3600));
$sqlQuery = "SELECT * FROM ".DATA_TABLE."330 WHERE `status`=0 and `add_time`<'".$time_later."' and `f5690`='0'";
$result = mysql_query($sqlQuery);
while ($row = mysql_fetch_assoc($result)) {
  
	$data = Array();
	$data['f5660']  = "Не проведено";
	$data['status'] = 1;
	data_update(330, EVENTS_ENABLE, $data, "`id`=",$row['id']);
}

Может кому пригодится - спасибо за оперативную помощь))

#2 AntonKravchenko

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

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

Отправлено 09 Май 2017 - 21:26

data_update(330, EVENTS_ENABLE, array('status'=>1, 'f5660'=>'Не проведено'), "status=0 AND f5690='0' AND add_time<'".date("Y-m-d H:i:s", time()-3600)."'");

Сообщение отредактировал AntonKravchenko: 10 Май 2017 - 10:10






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

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