Topic: Php - Mysql

Kaip padaryti jog prie seno parametro pridėtų naują...

Pas mane tipo paslaugą galima užsisakyti ir kai užsisako į mysql įsirašo štai šita eilutė:

$laikas = time() + 2592000;
$paring="UPDATE players SET sth=1 expire_date='".$laikas."' WHERE players.id='".$message."')";

O aš norėčiau padaryti, jog būtų galima pratęsti tą paslaugą... Jog jei nusiųs nepasibaigus laikui to expire_date laikui, tai senas expire_date prisidės prie naujo, bet jaučiu nesigaus, nes į expire_date įeina ir tas laikas kada buvo užsakyta time(); tai gal koks kitas būdas yra ???

2 (edited by zygis 2011-01-18 11:49:40)

Re: Php - Mysql

Jei teisingai supratau, tai tau reikia pirmiausia paselectinti eilutę, ir pasitikrinti ar expire_date reikšmė nėra mažesnė už time(), jei taip tada palieki kaip yra dabar, jei ne tada pridedi ne prie time() reikšmės, bet prie tos kurią išsitraukei iš duomenų bazės.

P.S. dabartinis variantas prideda kažkokį laiko tarpą nuo dabartinio laiko.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Php - Mysql

Aišku, o kaip paselectinti tą expire_date :S

$aa = mysql_query("SELECT * FROM players
WHERE players.id='".$message."');

ir tada patikrinti if($aa = 0) tada tas kodas kur jau turiu, ir tada else ir ką ten toliau ?

Re: Php - Mysql

Kadangi jau sukūrei 3-ią temą dėl to pačio klausimo, tai noriu priminti:
http://www.mysql.lt/forumas/viewtopic.php?id=1574
http://www.mysql.lt/forumas/viewtopic.php?id=1568

Toliau noriu pasakyti, kad lengviausia viską padaryti MySQL'e, nenaudojant PHP.
Operacijoms su datomis ir laiku funkcijos yra čia:
http://dev.mysql.com/doc/refman/5.1/en/ … tions.html

Tiesiog viską atidžiai perskaityk, kad jau yra parašyta visose šiose nuorodose ir turėtų nelikti klausimų (-;

Re: Php - Mysql

minde wrote:

Kadangi jau sukūrei 3-ią temą dėl to pačio klausimo, tai noriu priminti:
http://www.mysql.lt/forumas/viewtopic.php?id=1574
http://www.mysql.lt/forumas/viewtopic.php?id=1568

Toliau noriu pasakyti, kad lengviausia viską padaryti MySQL'e, nenaudojant PHP.
Operacijoms su datomis ir laiku funkcijos yra čia:
http://dev.mysql.com/doc/refman/5.1/en/ … tions.html

Tiesiog viską atidžiai perskaityk, kad jau yra parašyta visose šiose nuorodose ir turėtų nelikti klausimų (-;

Taip 3 tema, bet klausimai skiriasi.. :)

Re: Php - Mysql

Jo.. bet paskaityk ten kur DATE_ADD() funkcija aprašyta... kažkaip jaučiu, kad net nežiūrėjai (-;

Re: Php - Mysql

Jo, bet man vienas žmogus sakė jog time() naudoti geriau, nežinau kodėl, galbūt prie jo lengviau pridėti datą...

Ar veiktų jei naudočiau DATE_ADD(time();, INTERVAL 30 DAY) ??? ar reiktų naudoti DATE_ADD(NOW();, INTERVAL 30 DAY) ???

Ir kaip dėlto jog pratęsti datą...

Re: Php - Mysql

su DATE_ADD() gali prie norimos datos - bet kokios (įskaitant ir NOW()) pridėti kokį nori laiko tarpą. Gali naudoti tiek norimo stulpelio reikšmę, tiek kokių nori funkcijų grąžinamą reikšmę. Pabandyk.

9 (edited by addinol 2011-01-18 14:17:37)

Re: Php - Mysql

Aišku, o tą praitą datą gerai gaunu ?

$aa = mysql_query("SELECT expire_date FROM players
WHERE players.id='".$message."');

ir tada būtų

if($aa = 0)
{
   $paring="UPDATE players SET sth=1 expire_date=DATA_ADD(NOW(), INTERVAL 30 DAY) WHERE players.id='".$message."')";
}else{
   $paring="UPDATE players SET sth=1 expire_date=DATA_ADD($aa, INTERVAL 30 DAY) WHERE players.id='".$message."')";
}

ar aš neteisus ;) ?

Re: Php - Mysql

Tu man geriau paaišikink kam tu ją atskirai išgauni, patikrini su PHP ir tada vėl naudoji MySQL'e? Tu juk gali iš karto viską naudoti vienoje užklausoje. Pas tave viskas net vienoje lentelėje, gali rašyti ir IF sąlygas jeigu nori kažką patikrinti ir pagal rezultatą turėti alternatyvas:

$paring="
   UPDATE players
      SET sth = 1,
         expire_date = DATA_ADD(IF(expire_date = .., .., ..), INTERVAL 30 DAY)
   WHERE players.id = '" . $message . "'";

(pas tave buvo sintaksės klaida - SET elementai turi būti atskirti kableliais)

Re: Php - Mysql

Hm šito nežinojau, jog galima viską vienoje užklausoje daryti... nu pabandysiu. bet gal galėtum tiksliau su tuo if'u pačiame paring'e paaiškinti...

expire_date = DATA_ADD(IF(expire_date = 0){NOW();}else{expire_date}), INTERVAL 30 DAY)

taip ?

Re: Php - Mysql

Nespėliok, ir galiu užtikrinti, kad tikrai PHP sintaksė ten netinka (-; Sintaksės rėmus jau daviau, bet galima rašyti bent pora atveju, pabandyk pasiskaityti (ir pavyzdžius):
http://dev.mysql.com/doc/refman/5.1/en/ … ement.html

13 (edited by addinol 2011-01-18 15:06:11)

Re: Php - Mysql

Vistiek nelabai supratau kaip tą if naudoti DATE_ADD funkcijos viduje, nes po SET reikia parašyti dar vietą ir ką nustatyti, ar ir tiktų toks:

expire_date = DATA_ADD(IF expire_date = 0 THEN SET NOW() ELSE SET expire_date), INTERVAL 30 DAY)

ar naudoti:

IF expire_date = 0 THEN SET expire_date = DATA_ADD(NOW(), INTERVAL 30 DAY)
   ELSE SET expire_date = DATA_ADD(expire_date, INTERVAL 30 DAY)

Bet tiksliai nežinau kur tokį dėti, turbūt po SET sth = 1, **čIA ?** WHERE ...

Re: Php - Mysql

Atidžiau paskaityk mano žinutę, joje tikrai turėtum pastebėti beveik gatavą SQL užklausą, kurioje struktūriškai jau keisti nieko neliko, ir ten tikrai matosi kaip naudojama IF ir DATE_ADD tarpusavyje...

Re: Php - Mysql

Juk pas mane panašiai ir padaryta... tas viršutinis kodas..

ar taip: - ?

DATA_ADD(IF(expire_date = 0 THEN SET NOW() ELSE expire_date), INTERVAL 30 DAY)

Bet čia juk tas ;/

Re: Php - Mysql

addinol wrote:

Juk pas mane panašiai ir padaryta... tas viršutinis kodas..

ar taip: - ?

DATA_ADD(IF(expire_date = 0 THEN SET NOW() ELSE expire_date), INTERVAL 30 DAY)

Bet čia juk tas ;/

Taip, ta viršutinė užklausa jau tai ko reikia. O ar veikia ir ar taip veikia kaip norėtum - turi tikrinti. Tik pasitikslink sintaksę, nes panašu, kad kai kur panioji dvi IF formas, kur reikalingas ELSE, o kur naudojami kableliai.

Re: Php - Mysql

Bet vistiek nesupratau pričiom čia yra tas skliaustas...

DATA_ADD(IF(expire_date = 0 THEN SET NOW() ELSE expire_date), INTERVAL 30 DAY)

Re: Php - Mysql

Nes neskaitei mano duotos nuorodos: http://dev.mysql.com/doc/refman/5.1/en/ … unction_if

19 (edited by addinol 2011-01-18 17:47:14)

Re: Php - Mysql

aa kitą vietą skaičiau, tai turėtų būti taip:

$aa = mysql_query("SELECT expire_date FROM players
WHERE players.id='".$message."');

DATA_ADD(IF(expire_date = 0,'NOW()', '".$aa."'), INTERVAL 30 DAY)

Ir ar teisingai gaunu tą expire_date ..

Re: Php - Mysql

addinol wrote:

aa kitą vietą skaičiau, tai turėtų būti taip:

$aa = mysql_query("SELECT expire_date FROM players
WHERE players.id='".$message."');

DATA_ADD(IF(expire_date = 0,'NOW()', '".$aa."'), INTERVAL 30 DAY)

Ir ar teisingai gaunu tą expire_date ..

Ne. Skaityk iš naujo žinutę #10

Sorry, aš daugiau neatsakinėsiu, nes matau, kad tu pats galvoti visiškai nenori ir tingi netik, kad paskaityti, bet ir suprasti, kas tau rašoma (-;