Ik ben bezig met een aanleversysteem waarbij klanten hun spullen via de browser kunnen aanleveren. Nu staan alle klant gegevens + orders in een Filemaker db. En deze willen we eigenlijk niet rechtstreeks op internet hebben en ik schrijf er ook liever niet in. Er is gekozen voor een dump naar xml welke ik ga importeren naar mysql.
Nu wil ik de bestaande updaten en de niet bestaande inserten.
Op dit moment werkt het nog zo:
Moet handiger kunnen denk ik, dus ik ging opzoek naar een andere oplossing:
Zou het dus liever andersom willen hebben. Ik vond deze oplossing:
Dus ik vraag mij af wat het slimste is om te doen?
Nu wil ik de bestaande updaten en de niet bestaande inserten.
Op dit moment werkt het nog zo:
PHP:
Dit resulteerd in heel veel select opdrachten en dan nog een keer update of insert. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| //checken of opdrachtgever al in de db staat $query = mysql_query("SELECT klant_nr FROM tblOpdrachtgevers WHERE klant_nr = '$klant_nr[0]'") or die ("fout in de query"); $klant_nr_DB = mysql_fetch_array($query); if($klant_nr[0] == $klant_nr_DB[0]) { //zo ja, update mysql_query("UPDATE tblOpdrachtgevers SET bedrijfsnaam = '$bedrijfsnaam[0]' WHERE klant_nr = '$klant_nr[0]'") or die (mysql_error()); } else { //zo nee, insert mysql_query("INSERT INTO tblOpdrachtgevers (klant_nr, bedrijfsnaam) VALUES('$klant_nr[0]', '$bedrijfsnaam[0]')") or die (mysql_error()); } |
Moet handiger kunnen denk ik, dus ik ging opzoek naar een andere oplossing:
PHP:
Ziet er in princiepe goed uit maar het nadeel is dat ik in mijn geval altijd meer updates heb dan inserts. 1
2
3
| mysql_query("INSERT INTO tblOpdrachtgevers (klant_nr, bedrijfsnaam) VALUES('$klant_nr[0]', '$bedrijfsnaam[0]') ON DUPLICATE KEY UPDATE bedrijfsnaam = '$bedrijfsnaam[0]'"); |
Zou het dus liever andersom willen hebben. Ik vond deze oplossing:
PHP:
Nadeel van deze is (volgens mysql.com) dat de actie replace into meer tijd kost dan een update. En dat replace echt dingen delete in je tabel ipv updaten. 1
2
| mysql_query ("REPLACE INTO tblOpdrachtgevers (klant_nr, bedrijfsnaam) VALUES('$klant_nr[0]', '$bedrijfsnaam[0]')"); |
Dus ik vraag mij af wat het slimste is om te doen?
