CurlyMo schreef op woensdag 7 maart 2018 @ 17:02:
Wat je ook zou kunnen doen is gewoon de XML direct in een database import tabel dumpen en dan al je data transformaties binnen MySQL doen. Dan heb je geen R nodig. MySQL ondersteund gewoon xpath.
Dat wordt eigenlijk fase 2 van het project aangezien ik daar nog geen ervaring mee heb op dit moment.ect aangezien ik daar nog geen ervaring mee heb op dit moment.
GlowMouse schreef op woensdag 7 maart 2018 @ 17:08:
[...]
MySQL geeft die melding toch echt niet zomaar. Door je update-query dreigt een dubbele waarde te ontstaan. Je kunt zeggen dat het niet zo is, maar je kunt beter uitzoeken waarom het toch zo is. Ik steek mijn hand ervoor in het vuur dat MySQL op dit punt geen bug bevat.
Ik zeg ook niet dat het een bug is. Vanmorgen heb ik echter de oplossing gevonden en die zal ik even hieronder neer planten. Het was een typefout van mijn kant.
base_ schreef op woensdag 7 maart 2018 @ 17:08:
Wow jij gaat je magento 2 salles orders manipuleren vanuit een bash script? Ik hoop dat je weet dat je hiermee allee magento hooks, indexing en andere magento functionaliteit omzeilt? Meestal wordt er een magento script gemaakt voor het manipuleren van magento data. Zowiezo gaat het updaten van increment_id op basis van email adres gegarandeerd problemen opleveren: zodra een klant meerdere orders op hetzelfde email adres gemaakt heeft.....
Klopt. Deze magento 2 installatie wordt echter alleen intern gebruikt en hier staan alleen wat dingen in wat niet zo bijster uitmaken. Het kan inderdaad zo zijn dat het email adres anders is echter is het zo dat het Bol mail adres elke paar maanden wijzigt waardoor je vrijwel nooit hetzelfde adres kan krijgen. Dit met de email is ook maar een tijdelijk iets. Ik pak later hiervoor het orderid welke ik ook ter beschikking heb.
.Johnny schreef op woensdag 7 maart 2018 @ 17:09:
Het is moeilijk te beantwoorden zonder een duidelijk beeld van het datamodel en de keys en constraints.
dit bijvoorbeeld:
"UPDATE sales_order SET increment_id = $OrderId WHERE customer_email LIKE '%$Email%'"
Het lijkt er dus op dat increment_id een gecombineerde unique key is met store-id. Doordat je een update doet op basis van een email adres kan het toch prima zijn dat je probeert meerdere rijen tegelijk een zelfde increment_id te geven (die statisch is, want $OrderId). Stel je hebt:
sales_order:
increment_id, customer_email, store_id
x, y, z
2, y, z
en nu doe je:
"UPDATE sales_order SET increment_id = P WHERE customer_email LIKE '%y%'"
Dan hang je al, want hij wil dit maken:
increment_id, customer_email, store_id
P, y, z
P, y, z
maar dat kan niet volgens de constraint.
Om goed te debuggen raad ik je aan het probleem te reproduceren in een zo minimale setting als mogelijk is. Ik vermoed dat je tijdens die reis je probleem zelf al oplost, maar zonder die stappen is het hier gewoon gissen waar het mis gaat.
De fout heb ik gelukkig gevonden en dat was puur een variable fout. Ik heb hierboven $Email geschreven maar dat moest dus $EMAIL zijn. Beetje domme fout van mij.
Hero of Time schreef op woensdag 7 maart 2018 @ 17:47:
En je wilt al helemaal geen wildcards gebruiken als je op email adres gaat zoeken. Het bestaat, of bestaat niet. Wat als je nou de email adressen "j.jansen@example.com" en "pj.jansen@example.com", en j.jansen besteld iets. Dan krijgt pj.jansen spontaan een bestelling toegewezen. Echt, geweldige manier om met je klantgegevens om te gaan.
* Hero of Time geeft @Yagermeister alvast een paracetamol voor de pijn die gaat komen in de voet. 
Heb je helemaal gelijk bij. Zoals hierboven ook aangegeven is dat iets wat nog gaat wijzigen en het email is vrijwel nooit 2x hetzelfde doordat Bol ze versleutelt aanleverd. Daarbij is de hele constructie alleen voor intern gebruik en wordt er ook niet mee gemailed.
The Eagle schreef op woensdag 7 maart 2018 @ 17:58:
Ik vermoed dat je probleem veroorzaakt wordt door een implicit commit bij het afsluiten van je sessie.
Sessie openen, Eerste update statement, sessie sluiten en auto commit
Vervolgens idem voor tweede statement
Makkelijk te testen of dat het issue is; open msql sessie, vuur statement 1 handmatig af, commit, statement 2, commit. Zou me niks verbazen als ie dan de zelfde fout geeft
Heeft te maken met transaction logging en de status van de data in je DB cq sessie buffer.
Bedankt voor de tip. De fout is zoals hierboven beschreven een schrijffout in de variable. Ik had geen caps gebruikt terwijl ik de variable wel in volledige caps had geschreven. Normaal copy en paste ik die altijd alleen deze keer had ik dat niet gedaan.