Автоматично ъпдейтване на поле в db през определено време

dunix

Registered
Здравейте,

искам да направя така, че всеки един месец на 1ви дадена група от потребители да им се ъпдейтва зададено от мен поле с някаква стойност.

Става дума за нещо такова:

[sql]UPDATE members SET bonus=bonus+3 WHERE group_id= '$group'[/sql]
Как може да стане това?
 
Зависи каква степен на елегантност се търси.

$timeAfterMonth = time() + 60*60*24*30; //може и да бъркам тук (идеята е да е месец)
if($timeAfterMonth <= time()){ $sqlQuery; }
 
може да сложиш една проверка дали деня от месеца е 1ви, като кода трябва да го сложиш във файл който се зарежда винаги при влизане в сайта ти. примерче:

Код:
if( date('d')==1 )
{
      тук update db ...
}
 
legolas каза:
може да сложиш една проверка дали деня от месеца е 1ви, като кода трябва да го сложиш във файл който се зарежда винаги при влизане в сайта ти. примерче:

Код:
if( date('d')==1 )
{
      тук update db ...
}
Това е глупаво - представи си какво ще стане като влязат няколко човека в сайта ти? Ако има 100 посещения в първия ден от месеца, бонусите на VIP потребителите ще се увеличат с 300... :twisted:

Ето моето предложение:

PHP:
if(date('j') == 1) {
   if(!file_exist("updated")){//
      $f = fopen("updated", "w");
      //сега тук ъпдейтваш
      fclose($f);
   }
}
else {
   if(file_exist("updated")){
      unlink("updated");
   }
}
Дори това не е най-доброто решение, защото ако във въпросния ден никой не влезе в сайта, таблицата няма да се ъпдейтне.
 
Аз имам следната идея: Създавам една таблица с едно поле и един запис където записвам последния ъпдейт: Примерно:

$sql = "SELECT IF(`last_update`<=NOW(),1,0) AS `update` FROM `table_name` LIMIT 1;

$r = mysql_query($sql);

$s = mysql_fetch_assoc($r);

if($s['update']==1){


$sql = "UPDATE`table_name` SET `last_update` = ADDDATE(NOW(),1)";

//Следващият ъпдейт - след минимум 1 ден

$r = mysql_query($sql);

... каквото друго трябва да се ъпдейтва ...


}

Проблема е, че ако няма посещения за този период, ще се пропусне един или няколко ъпдейта.

Това може да се реши като се направи проверка за колко периода (в случая дни) не е правен ъпдейт.


Искам да попитам запознатите, ако (хипотетично) има примерно 100 или 1000 заявки едновременно, има ли вероятност нещо да се обърка и да има повече от един ъпдейт ?
 
Можеш да ползваш и това (зависи от това какво прави заявкта). Подобно е на cronjobs и Windows Task Scheduler, но е вградено в MySQL и не трябва да инсталираш нищо.
 
anonimen каза:
Това е глупаво - представи си какво ще стане като влязат няколко човека в сайта ти? Ако има 100 посещения в първия ден от месеца, бонусите на VIP потребителите ще се увеличат с 300... :twisted:
Е това няма да важи защото имам поле, което записва кога е направен последния ъпдейт и трябва да е lastupdate<=$now_time за да направи ъпдейта.

tedo96 каза:
Това се прави с Cron задача, както ти казаха по-горе. :)
Да, но като хостинга ми са забранили whet трябва да посочвам файл, който да се пуска на зададеното от мен време. Ами ако хипотетично сменя хостинг-а и забравя да пусна тази cron задачка...

marian каза:
Можеш да ползваш и това (зависи от това какво прави заявкта). Подобно е на cronjobs и Windows Task Scheduler, но е вградено в MySQL и не трябва да инсталираш нищо.

мм да, но тъй като моят cron файл няма само заявки към db, ами праща и имейли към потребители... няма да ми свърши много работа.
 
В такъв случай ти трябва просто едно поленце, някъде, в някоя таблица, файл или каквото там си решиш, където да записваш годината-месеца, когато последно си го ъпдейтнал.
Ако нямаш запис, или пък е за предходен - ще си ъпдейтнеш, ще си пратиш мейлите и ще редактираш записа, че на този месец си свършил тая работа.
Така ще избегнеш проблема ако никой не влезе на 1ви :idea:
 

Горе