PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   Reset auto incrementa na novu godinu (PHP MYSLQ) (https://forum.pcekspert.com/showthread.php?t=262331)

Mane 21.08.2014. 13:27

Reset auto incrementa na novu godinu (PHP MYSLQ)
 
Pozdrav,

slazem neku jednostavnu aplikaciju koja bi mi bila od pomoći ali sam naletio na mali problem. Zanima me na koji način napraviti da se broj neki resetira na novu godinu. Recimo ako tablica racun izgleda ovako:

Code:

racun  (innodb)
ID(AI i PK)    BROJ_RACUNA        GODINA
1                      1              2014
2                      2              2014
---
3                      1              2015

Znači, ID je samo sistemski id i to je primarni ključ. Pravi broj računa bi trebao biti u stupcu broj racuna i onda bi echo u phpu samo izgledao tipa
Code:


ugrubo...tek toliko da se kuzi sta bi trebalo izac van.

E sad ne znam kako napraviti da se broj racuna resetira na novu godinu... mislio sam slozit MysQL scheduel statement al ne znam dal postoji alternativa. Hvala

ShebY 21.08.2014. 13:52

PHP kod:

$godina 

jeli ta varijabla zadana negdje ili?
Ako je imaš negdje zadanu ručno, usporedi samo date('o').
Ako je različito update varijeble i pošalješ SQL za reset AI.

Mane 21.08.2014. 14:49

pozdrav,

ovo sto sam ja napravio ECHO u primjeru to je zapravo ECHO iz baze znaci bilo bi to

Code:

echo row['godina'] . "/" . row[broj_racuna]
zato sam rekao otprilike,

a u stupac godina bi se popunjavao iz varijable neke koja bi echoala trenutnu godinu... tako da taj dio nije problem.

Samo je problem to da se auto increment resetira na novu godinu, a varijabla sa godinom ce bit 2015 100% .. jer ide direktan output trenutne godine.

Mozda sam malo pojasnio sto zelim, nadam se :)

ShebY 21.08.2014. 15:07

Jedino što meni pada napamet je povalčenje zadnjeg unosa iz baze i onda uspoređivanje sa date(), drugo neznam i sam sam dosta nov u ovome.

Mane 21.08.2014. 15:35

Hmmmm prvo nisam skuzio sta mislis... al sad mi je pala ideja na pamet, ne znam ako je to isto to što i ti kažeš :)

Znači ovako kod unosa u bazu napravit ću prvo uzimanje godine zadnjeg reda, zatim ako se ta godina razlikuje od trenutne godine (što znači da je godina promjenjena) prije samog unosa u bazu tada će se napraviti reset auto increment polja (samo ne znam dal to moze bit neko odredjeno polje). i to bi moglo bit to mozda, u glavi :D sad ne znam kako u praksi

ShebY 21.08.2014. 16:54

Tako nešto, samo prije unosa uzmi zadnji red iz baze i obavi reset.
E sad sami reset je poseban problem koliko sam ja malo googlao innodb se nemože resetirati AI, već se samo truncate-a taj stupac i ponovo napravi što IMO nema smisla. MOžda nova tablica za svaku godinu?

Mane 21.08.2014. 19:42

Hmm ili da tablica bude myissam xD ... ajde bas cu vidit ako sta mogu smuckat... ako uspijem javim tu, pa mozda nekome bude trebalo. hvala

Kruno M 22.08.2014. 07:59

A da ubaciš u tablicu još jedno polje "Slijed" pa njega mijenjaš s obzirom na uvjete datuma i godine. Programski sam sve određuješ a ne da MySQL sam to drađuje.

Mane 22.08.2014. 13:09

Evo prijatelj uskočio u pomoć, kako jednostavna solucija a na netu ne možeš nać to.


jedan upit koji sve napravi zapravo.
uvjet je da su broj_racuna, godina i user_id unique grupa, index znaci.

Code:

"select ifnull(max(broj_racuna),0)+1 as broj
from racuni where godina = {$godina} and user_id = {$idusers};";

onda u app prije samog unsa se napravi taj upit, i njegov AS broj ide sad u broj sljedećeg računa... kada se varijabla godina promijena, to vise nije unique i kreće od 1 ponovno.. prejednostavan, ali jako pametno napravljen upit.


Sva vremena su GMT +2. Sada je 16:20.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger