Bij het bedrijf waar ik voor werk heeft men besloten om hun numerieke artikelnummers te verlengen van 9 naar 10 posities.
In het verleden heeft men de nummers hier ook al eens verlengd van 7 naar 9 posities, maar destijds werd er gewoon '00' als suffix toegevoegd. Aangezien dit echter niet via het ERP-pakket zelf kan, heeft de persoon die dat destijds gedaan heeft, het rechtstreeks via SQL gedaan met de volgende query.
Echter nu komt er niet gewoon een '0' voor of achter maar ertussen. Zover ik nu heb uitgeprobeerd lukt het niet om CONCAT(CONCAT(left(artikelnummer,7), '0'), right(artikelnummer,2)) of iets dergelijks te doen.
Ik ben dus aan de slag gegaan om het dan maar via PHP te doen en dat gaat op zich prima, maar ik moet tussen de 150.000 en 250.000 records updaten. Met max_execution_time op 30 seconden kom je er dan niet. Dat is echter wel te voorkomen door die tijdelijk met set_time_limit gewoon te verhogen naar 22800 seconden (
), dit aangezien het updaten van 4000 regels al zo'n 10 minuten in beslag neemt.
Echt helemaal happy met die oplossing ben ik natuurlijk niet, maar als het niet anders kan, dan zal het moeten. Tevens wil ik eigenlijk ook wel kunnen zien waar het script ongeveer aan bezig is, door bijvoorbeeld per tabel aan te geven dat hij daaraan begonnen is en weer klaar is.
Mijn vragen aan jullie is nu:
- Kan dit anders, sneller, handiger? (Het hoeft niet perse met PHP)
- Hoe kan ik ervoor zorgen dat ik tijdens het uitvoeren van het script toch informatie op mijn scherm te zien krijg, zodat ik zie dat bepaalde delen al gedaan zijn, i.p.v. enkel achteraf?
In het verleden heeft men de nummers hier ook al eens verlengd van 7 naar 9 posities, maar destijds werd er gewoon '00' als suffix toegevoegd. Aangezien dit echter niet via het ERP-pakket zelf kan, heeft de persoon die dat destijds gedaan heeft, het rechtstreeks via SQL gedaan met de volgende query.
SQL:
1
2
3
| UPDATE "ARTIKEL" SET artikelnummer = CONCAT(left(artikelnummer,7), '00') WHERE artikelnummer > '0000000' and artikelnummer < '9999999' and length(artikelnummer) = 7 |
Echter nu komt er niet gewoon een '0' voor of achter maar ertussen. Zover ik nu heb uitgeprobeerd lukt het niet om CONCAT(CONCAT(left(artikelnummer,7), '0'), right(artikelnummer,2)) of iets dergelijks te doen.
Ik ben dus aan de slag gegaan om het dan maar via PHP te doen en dat gaat op zich prima, maar ik moet tussen de 150.000 en 250.000 records updaten. Met max_execution_time op 30 seconden kom je er dan niet. Dat is echter wel te voorkomen door die tijdelijk met set_time_limit gewoon te verhogen naar 22800 seconden (

Echt helemaal happy met die oplossing ben ik natuurlijk niet, maar als het niet anders kan, dan zal het moeten. Tevens wil ik eigenlijk ook wel kunnen zien waar het script ongeveer aan bezig is, door bijvoorbeeld per tabel aan te geven dat hij daaraan begonnen is en weer klaar is.
Mijn vragen aan jullie is nu:
- Kan dit anders, sneller, handiger? (Het hoeft niet perse met PHP)
- Hoe kan ik ervoor zorgen dat ik tijdens het uitvoeren van het script toch informatie op mijn scherm te zien krijg, zodat ik zie dat bepaalde delen al gedaan zijn, i.p.v. enkel achteraf?