Ha iedereen,

Voor sommige dingen heb je een steeds oplopend nummer nodig, denk aan factuurnummers e.d. Wat is de beste manier om het huidige nummer op te slaan, zodat je de volgende keer - bij bijvoorbeeld een nieuwe factuur - weer weet bij welk nummer je bent? Momenteel heb ik altijd een tabelletje "counters", met daarin de naam en de huidige waarde, waarbij bij iedere transactie het nummertje 1 omhoog wordt ge-update.

Ik vroeg me af of dit niet eenvoudiger / praktischer kan, hoe doen jullie dit?

Groet,
Ricardo
In SQL => Auto_increment
Ja, maar dat is wel wat minder effectief als je wilt weten wat het volgende nummer is zonder het nummer te verhogen, aangezien je dan het laatst toegevoegde resultaat moet opzoeken.
Hoe zou je dan aan die waarde willen komen?

En waarom wil je dit efficiƫnter doen? Moet deze query heel veel keer uitgevoerd worden?
Anders zou je gewoon de huidige waarde van de rij uit de counter tabel kunnen opvragen. De waardes worden inderdaad vrij vaak opgevraagd. Maar dan ga ik gewoon verder met mijn counter tabellen :-).
Kijk naar de opmerking van SanThe. Zoiets regel je met auto increment. Je hoeft dan de waarde van de voorgaande factuur helemaal niet te weten. Zodra je een record invoegt dan vraag je de waarde op van de laatste ingevoegde id. Aan de hand van deze id maak je het factuurnummer. Je slaat het factuurnummer dus niet op in een apart veld, maar je leidt dit af van het id. Stel je id is 33, dan maak je bijvoorbeeld van je factuurnummer 201133. (Als je vervolgens in een beheersysteem via een zoekveld deze factuur zou willen opzoeken, dan zoek je via je query naar een id van 33 die in 2011 is aangemaakt).

Zie hier voor opvragen van het ingevoegde id:

http://php.net/manual/en/function.mysql-insert-id.php
Een aparte tabel is inderdaad onzin.

Edit: het gebruiken van auto_increment heeft ook geen performance nadeel. Kan je gerust duizend keer in een uur doen zonder dat je er wat van merkt. Een 'countertabel' is veel minder effectief.
Ozzie PHP op 27/07/2011 15:19:51

Kijk naar de opmerking van SanThe. Zoiets regel je met auto increment. Je hoeft dan de waarde van de voorgaande factuur helemaal niet te weten. Zodra je een record invoegt dan vraag je de waarde op van de laatste ingevoegde id. Aan de hand van deze id maak je het factuurnummer. Je slaat het factuurnummer dus niet op in een apart veld, maar je leidt dit af van het id. Stel je id is 33, dan maak je bijvoorbeeld van je factuurnummer 201133. (Als je vervolgens in een beheersysteem via een zoekveld deze factuur zou willen opzoeken, dan zoek je via je query naar een id van 33 die in 2011 is aangemaakt).

Zie hier voor opvragen van het ingevoegde id:

http://php.net/manual/en/function.mysql-insert-id.php


Ja, maar voor elke factuur die er aangemaakt wordt wordt het laatste nummer ongeveer ~20 maal opgevraagd, om dan iedere keer een query te doen op de gehele tabel met 50000 facturen om het laatste nummer op te vragen lijkt me onzin.
Ooit gehoord van sessies? En als je 20x een nummer gaat opvragen dan is er iets compleet mis met je logica.
Je roept mysql_insert_id() maar 1x aan, namelijk na het invoeren van het record in de tabel waar de betreffende auto_increment zit. Dat geeft je het id van het laatst ingevoerde record terug, die zet je in een (sessie)variabele en kun je daarna prima 20x gebruiken...
Ozzie PHP op 27/07/2011 17:14:40

Ooit gehoord van sessies? En als je 20x een nummer gaat opvragen dan is er iets compleet mis met je logica.


Alle medewerkers hebben verschillende accounts, dus sessies gaan niet werken. De logica klopt helemaal, maar die ga ik niet uitleggen. In ieder geval bedankt voor het meedenken.

Reageren