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

C++ JAVA
dunix
Турист
Турист
Posts: 570
Joined: Wed Jul 25, 2007 5:55 pm

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

Post by dunix » Wed Dec 11, 2013 6:42 pm

Здравейте,

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

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

[sql]UPDATE members SET bonus=bonus+3 WHERE group_id= '$group'[/sql]
Как може да стане това?
Last edited by dunix on Wed Dec 11, 2013 6:48 pm, edited 1 time in total.

User avatar
plamen_003
Турист
Турист
Posts: 494
Joined: Mon Nov 26, 2007 8:16 pm
Answers: 13
Location: София

Post by plamen_003 » Wed Dec 11, 2013 6:45 pm

С Cron Jobs може да стане.

dunix
Турист
Турист
Posts: 570
Joined: Wed Jul 25, 2007 5:55 pm

Post by dunix » Wed Dec 11, 2013 6:59 pm

Някакъв алтернативен начин?

pawel_angelow
Нов
Нов
Posts: 6
Joined: Wed Dec 11, 2013 9:55 pm

Post by pawel_angelow » Wed Dec 11, 2013 10:10 pm

Зависи каква степен на елегантност се търси.

$timeAfterMonth = time() + 60*60*24*30; //може и да бъркам тук (идеята е да е месец)
if($timeAfterMonth <= time()){ $sqlQuery; }

legolas
Нов
Нов
Posts: 81
Joined: Fri Dec 18, 2009 11:28 pm
Contact:

Post by legolas » Thu Dec 12, 2013 12:57 am

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

Code: Select all

if&#40; date&#40;'d'&#41;==1 &#41;
&#123;
      тук update db ...
&#125;

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1595
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 165
Location: Parse error: unexpected "}" in /home/index.php on line 26

Post by anonimen » Thu Dec 12, 2013 8:25 am

legolas wrote:може да сложиш една проверка дали деня от месеца е 1ви, като кода трябва да го сложиш във файл който се зарежда винаги при влизане в сайта ти. примерче:

Code: Select all

if&#40; date&#40;'d'&#41;==1 &#41;
&#123;
      тук update db ...
&#125;
Това е глупаво - представи си какво ще стане като влязат няколко човека в сайта ти? Ако има 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");
}
}
[/php]
Дори това не е най-доброто решение, защото ако във въпросния ден никой не влезе в сайта, таблицата няма да се ъпдейтне.

User avatar
tedo96
Гуру
Гуру
Posts: 2816
Joined: Mon Feb 21, 2011 6:31 pm
Answers: 219
Location: Пловдив

Post by tedo96 » Thu Dec 12, 2013 9:08 am

Това се прави с Cron задача, както ти казаха по-горе. :)

madmax_3
Нов
Нов
Posts: 34
Joined: Wed Dec 19, 2012 3:50 pm
Contact:

Post by madmax_3 » Thu Dec 12, 2013 3:52 pm

Аз имам следната идея: Създавам една таблица с едно поле и един запис където записвам последния ъпдейт: Примерно:

$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 заявки едновременно, има ли вероятност нещо да се обърка и да има повече от един ъпдейт ?

User avatar
marian
Турист
Турист
Posts: 568
Joined: Fri Mar 14, 2008 1:13 pm
Answers: 151
Location: България

Post by marian » Thu Dec 12, 2013 7:05 pm

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

dunix
Турист
Турист
Posts: 570
Joined: Wed Jul 25, 2007 5:55 pm

Post by dunix » Thu Dec 12, 2013 9:31 pm

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

Post Reply