Ga naar inhoud

[PHP] Probleempje met uniek nummer


anoniem

Aanbevolen berichten

Ik wil dat gebruikers elk een uniek nummer krijgen dat bestaat uit het jaar en een nummer. Dus bijvoorbeeld 2002123 Dit lukt mij met de volgende code: [code:1:052a81f02a]$date=date("Y"); $id=mysql_insert_id(); $nummer="$date$id"; [/code:1:052a81f02a] Ik heb nu echter 1 probleem. De bedoeling is dat $id weer bij nul begint als het jaartal verandert. Dus na jaarwisseling krijg ik niet 2003124 maar 20030 Hoe ik dat voor mekaar krijgen?
Link naar reactie
gewoon geen auto_increment gebruiken maar zelf je numering bepalen zoals je ook al doet met het jaartal? evt. kan je met een tabel werken waarin alle mogelijke nummers staan en daar de juiste waarde uit opvragen. Als je dan deze tabel locked kan iig niet iemand tegelijkertijd hetzelfde nummer opvragen. Dus bijvoorbeeld zoiets (syntax-foutjes voorbehouden, mysql kennis is een beetje roestig): [code:1:81baf1212f] LOCK TABLES numbers WRITE SELECT MIN(nr) FROM numbers WHERE year < year(now()) UPDATE numbers SET year=year(now()) WHERE nr = [selected_nr] UNLOCK TABLES [/code:1:81baf1212f] waarbij je uitgaat van een tabel met een x aantal nummers met daarbij een jaartal, bijv.: [code:1:81baf1212f] TABLE numbers nr int year int DEFAULT '0' [/code:1:81baf1212f]
Link naar reactie
[quote:9cb93ff167="Annie"]SELECT MIN(nr) FROM numbers WHERE year < year(now())[/quote:9cb93ff167]Ik ben benieuwd waarom je hier een MIN(nr) zou willen doen? Als je je tabel als volgt zou laten opbouwen: [code:1:9cb93ff167]+------+----+ | 2002 | 30 | | 2003 | 59 | | 2004 | 12 | +------+----+[/code:1:9cb93ff167]En dan steeds het getal met 1 verhoogt. Dan ben je met alleen een [code:1:9cb93ff167]$query = "SELECT nummer FROM tabel WHERE jaar=" . date("Y");[/code:1:9cb93ff167]al klaar :)
Link naar reactie
[quote:d6dd36a52c="Piro"][quote:d6dd36a52c="Annie"]SELECT MIN(nr) FROM numbers WHERE year < year(now())[/quote:d6dd36a52c]Ik ben benieuwd waarom je hier een MIN(nr) zou willen doen?[/quote:d6dd36a52c]omdat ik voor een andere insteek heb gekozen, namelijk een vaste set waarden waar doorheen gerouleerd wordt. [quote:d6dd36a52c="Piro"] Als je je tabel als volgt zou laten opbouwen: [code:1:d6dd36a52c]+------+----+ | 2002 | 30 | | 2003 | 59 | | 2004 | 12 | +------+----+[/code:1:d6dd36a52c]En dan steeds het getal met 1 verhoogt. Dan ben je met alleen een [code:1:d6dd36a52c]$query = "SELECT nummer FROM tabel WHERE jaar=" . date("Y");[/code:1:d6dd36a52c]al klaar :)[/quote:d6dd36a52c]Dat is inderdaad ook een optie. Alleen zul je natuurlijk naast de select ook een "update +1" query uit moeten voeren en na afloop van je jaar een insert voor het nieuwe jaar moeten doen (maar even uit m'n hoofd kan dat waarschijnlijk ook met een enkele REPLACE INTO). Er leiden dus meerdere wegen naar Rome.
Link naar reactie
[quote:a89a290140="George W. Bush"]Zo kan het als je twee velden in je tabel hebt. [/quote:a89a290140]Nee hoor, da's nergens voor nodig. Je kan een tweede tabel maken die je gebruikt voor het "genereren" van je unieke nummering. Het resetten van de auto_increment is overigens bij mijn weten niet mogelijk (behalve dan door het droppen van de tabel).
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...