Effectieve PHP counter
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.
En waarom wil je dit efficiënter doen? Moet deze query heel veel keer uitgevoerd worden?
Gewijzigd op 27/07/2011 14:24:39 door Jack Sierkstra
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 :-).
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.
Gewijzigd op 27/07/2011 15:44:16 door The Force
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
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.
Gewijzigd op 27/07/2011 17:15:31 door Joren de Wit
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.
Mag ik vragen waar je het laatste id 20 keer voor nodig hebt? Overigens hoeft het selecteren van 1 record uit een tabel met 50000 records helemaal geen probleem te zijn, zo lang je maar de juiste indexen gebruikt.
SELECT factuurnummer FROM facturen ORDER BY factuurnummer DESC LIMIT 1
Bijvoorbeeld, en dan heb je uiteraard een INDEX op de kolom factuurnummer.