Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] Probleempje met uniek nummer

Annie
5 antwoorden
  • 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?
  • 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]
  • [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 :)
  • [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.
  • Zo kan het als je twee velden in je tabel hebt.

    Maar ik wil het nummer in 1 veld in een tabel.
    [code:1:23eb6d88b0]
    +——-+
    | 20021 |
    | 20022 |
    | … . |
    | 20031 |
    +——-+
    [/code:1:23eb6d88b0]

    Is het niet mogelijk om in de PHP je mysql_insertid te 'resetten' als er een nieuw jaar is begonnen?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.