Effectieve PHP counter

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

R Persoon

R Persoon

26/07/2011 19:08:42
Quote Anchor link
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
 
PHP hulp

PHP hulp

22/12/2024 09:52:58
 
- SanThe -

- SanThe -

26/07/2011 20:15:37
Quote Anchor link
In SQL => Auto_increment
 
R Persoon

R Persoon

27/07/2011 14:18:11
Quote Anchor link
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.
 
Jack Sierkstra

Jack Sierkstra

27/07/2011 14:22:44
Quote Anchor link
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?
Gewijzigd op 27/07/2011 14:24:39 door Jack Sierkstra
 
R Persoon

R Persoon

27/07/2011 14:31:08
Quote Anchor link
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 :-).
 
Ozzie PHP

Ozzie PHP

27/07/2011 15:19:51
Quote Anchor link
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
 
The Force

The Force

27/07/2011 15:29:55
Quote Anchor link
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.
Gewijzigd op 27/07/2011 15:44:16 door The Force
 
R Persoon

R Persoon

27/07/2011 17:10:23
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

27/07/2011 17:14:40
Quote Anchor link
Ooit gehoord van sessies? En als je 20x een nummer gaat opvragen dan is er iets compleet mis met je logica.
 
Joren de Wit

Joren de Wit

27/07/2011 17:14:51
Quote Anchor link
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...
Gewijzigd op 27/07/2011 17:15:31 door Joren de Wit
 
R Persoon

R Persoon

27/07/2011 18:04:39
Quote Anchor link
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.
 
Joren de Wit

Joren de Wit

27/07/2011 18:17:24
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

27/07/2011 18:35:00
Quote Anchor link
Zoiets?

SELECT factuurnummer FROM facturen ORDER BY factuurnummer DESC LIMIT 1
 
Joren de Wit

Joren de Wit

27/07/2011 18:53:05
Quote Anchor link
Bijvoorbeeld, en dan heb je uiteraard een INDEX op de kolom factuurnummer.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.