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


cron - проверка и обновление записей в таблице

обновление таблиц cron

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

#1 oknik

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

  • Пользователи
  • PipPipPip
  • 99 сообщений

Отправлено 02 Март 2016 - 20:58

задача сделать так что бы каждую ночь запускалась проверка таблицы "Задания" и в случае если там есть записи с заданными параметрами, вычисление отправляло их в архив.
вроде ничего сложного, но не хватает знаний не много.
вот такое вычисление, ничего не меняет:

$date_str = date("d.m.Y H:i");
if($line['Задания']['status']==0 && $line['Задания']['f7631']==3 && $line['Задания']['f6901']==date($date_str,strtotime("-2 day",strtotime($date_str))) )
{$line['Задания']['status']=1;}; // Отправляем в архив
echo 'Done';

на сколько я понимаю, и правильно делает, так как нужно как то дать понять что это должно происходить в таблице "Задания"?

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

#2 CbCoder

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

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

Отправлено 03 Март 2016 - 09:43

В этом разделе есть специально закрепленная тема для этого: Перенос вычисления в cron

#3 oknik

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

  • Пользователи
  • PipPipPip
  • 99 сообщений

Отправлено 04 Март 2016 - 14:28

писал в техподдержку, там сказали на форуме спросить, код показать, хотя мне все таки кажется что код в порядке.

ситуация такая:
вычисление для cron написано, оно полностью выполняется "Done!"
$date_str = date("d.m.Y H:i");
$result = data_select(47, "status=0");
while ($line = sql_fetch_assoc($result))
{
if($line['f7631']==4 AND $line['f6901']==date($date_str,strtotime("-2 day",strtotime($date_str))) )
$line['status']=1;
};
echo 'Done';

($line['f7631']==4 - поле связи "Статус" = "Принято"

но прикол в том что после этого в этой таблице я создал тестовое доп. действие, которое сейчас уже упрощено до вот такого:
if($line['Статус']==4) $line['status']=1;

но даже оно status не меняет


Заявка в тех поддержке #13566, там ссылки есть логин пароль

#4 CbCoder

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

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

Отправлено 04 Март 2016 - 14:47

Цитата

которое сейчас уже упрощено до вот такого:
if($line['Статус']==4) $line['status']=1;

А еще дальше не пробовали упростить?

$line['status']=1;

Если это сработает, значит что-то с условием $line['Статус']==4 не то.

#5 oknik

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

  • Пользователи
  • PipPipPip
  • 99 сообщений

Отправлено 28 Март 2016 - 20:33

$line['status']=1;
так срабатывает

а что тогда не так? если в
if($line['Статус']==4) 
4 - это id записи в связанной таблице?

вот так тоже ничего не меняется:
if($line['Статус']=='Принято')
$line['Статус записи']=1;
и так:
if($line['Статус']=="Принято")
$line['Статус записи']=1;

Сообщение отредактировал oknik: 28 Март 2016 - 20:35


#6 CbCoder

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

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

Отправлено 29 Март 2016 - 09:13

Извиняюсь, не обратил сразу внимание что это поле связи. В вычислениях поля связи разворачиваются в массив связанных полей, поэтому условие $line['Статус']==4 естественно работать не будет. Нужно писать либо $line['Статус']['ID']==4, либо $line['Статус']['Поле статуса в связанной таблице']=='Принято'

#7 oknik

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

  • Пользователи
  • PipPipPip
  • 99 сообщений

Отправлено 29 Март 2016 - 15:05

теперь вот так

в cron
$result = data_select(47, "status=0");

while ($line = sql_fetch_assoc($result))

{
if($line['f7631']['f7791']='Принято')
$line['status']=1;
};

echo 'Done'; 
статусы не меняются

у доп действия
if($line['f7631']['f7791']='Принято')
$line['status']=1;
все срабатывает как надо

#8 CbCoder

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

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

Отправлено 29 Март 2016 - 15:10

А в кроне то вы зачем поменяли на массив? Я же специально уточнил: "в вычислениях поля связи разворачиваются в массив связанных полей". К крону это никак не относится, т.к. там переменная $line - не системная предустановленная, а созданная вами вручную, как результат запроса, а запросах поля связи на данный момент никак не разворачиваются. Тем более что вы сами же писали, что в кроне у вас все прекрасно работало, проблема была только с д.д.

Доп.действия приравниваются к вычислениям, т.к. там такая же предустановленная $line.

#9 oknik

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

  • Пользователи
  • PipPipPip
  • 99 сообщений

Отправлено 29 Март 2016 - 17:35

так ) че то я вообще ничего понял
в кроне всегда НЕ работало.
давайте про д.д. вообще говорить не будем. все, его нет.

в кроне сейчас так и все равно не меняется статус:
$result = data_select(47, "status=0");

while ($line = sql_fetch_assoc($result))

{
if($line['f7631']==4)
$line['status']=1;
};

echo 'Done'; 


#10 CbCoder

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

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

Отправлено 29 Март 2016 - 17:46

Перечитайте: https://clientbase.r...indpost&p=27265 Там было дописано недавно как раз про ваш случай.


Если вам необходим был крон, то про доп.действие вы зря вообще заикались. Только запутали меня и себя и увели разговор в лишнюю сторону (хотя, надеюсь тоже пригодится)

#11 oknik

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

  • Пользователи
  • PipPipPip
  • 99 сообщений

Отправлено 29 Март 2016 - 18:23

все заработало:

$result = data_select(47, "status=0");

while ($line = sql_fetch_assoc($result))

{
if($line['f7631']==4) $line['status']=1;
data_update(47, $line, "id=",$line['id']);
};

echo 'Done';


#12 Александр Пономарев

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

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

Отправлено 14 Май 2016 - 15:46

Первая ошибка для Крона - попытка использовать встроенный массив line, которого там нет, пока вы не присвоите line строку, выбранную из таблицы.
Вторая ошибка - попытка присвоить line значение. Это работает в кнопках потому, что там эта команда интерпретируется встроенным обработчиком. Крон же работает напрямую с SQL и потому нужно обновлять измененные записи в базе данных командой обновления. Я в таких случаях вообще UPDATE использую самого SQL.





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

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