1 | "REPLACE INTO `tabel` (`een`,`twee`,`drie`) VALUES (:een,:twee,:drie)" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?php $db_old = new PDO(...); $db_new = new PDO(...); $res_new = $db_new->query("DESCRIBE `database_nieuw`.`tabel_nieuw`"); $fields = array(); $fields_types = array(); $fields_filling = array(); while ($row_new = $res_new->fetchObject()) { array_push($fields,"`".$row_new->Field."`"); array_push($fields_filling,":".$row_new->Field.""); if (preg_match("/int\(\d+\)/",$row_new->Type)) { $fields_types[$row_new->Field] = PDO::PARAM_INT; } elseif (preg_match("/date|text|varchar/",$row_new->Type)) { $fields_types[$row_new->Field] = PDO::PARAM_STR; } else { $fields_types[$row_new->Field] = PDO::PARAM_STR; } } $to_prepare = "REPLACE INTO `database_nieuw`.`tabel_nieuw` (".implode(",",$fields).") VALUES (".implode(",",$fields_filling).")"; echo "To prepare: " . $to_prepare . "\n"; $res = $db_old->query("SELECT * FROM `database_oud`.`tabel_oud`"); while($row = $res->fetchObject()) { $this_array = array(); $sth = $db_new->prepare($to_prepare); foreach ($fields as $f) { $f2 = preg_replace("/`/","",$f); $sth->bindValue(":".$f2,$row->$f2,$fields_types[$f2]); echo "Binding " . $f2 ." : " .$row->$f2. "\n"; } $sth->execute(); } ?> |
Hij gaf in het vorige topic het volgende voorbeeld.quote:Op woensdag 16 maart 2011 09:13 schreef Keiichi het volgende:
Als je de string waarin straat en huisnummer vermeld staat, split per spatie, het laatste element eraf popt (array_pop) en de rest weer joined. Dan heb je denk (als huisnummer altijd vermeld is!) een redelijk scheiding volgens mij.
Het is iets in ieder geval. Maar ik dacht dat die database redelijke compleet was.quote:Op woensdag 16 maart 2011 10:16 schreef GlowMouse het volgende:
Dat zijn helemaal niet alle straten van heel Nederland. Maar bij die paar straten die er wel instaan kun je het wel gebruiken.
Kun je het niet jatten van goeggel maps?quote:Op woensdag 16 maart 2011 10:19 schreef Keiichi het volgende:
[..]
Het is iets in ieder geval. Maar ik dacht dat die database redelijke compleet was.
Die kent ook niet alle straten.quote:Op woensdag 16 maart 2011 10:47 schreef shintek het volgende:
[..]
Kun je het niet jatten van goeggel maps?
Heb je voorbeelden? Ik kan me voorstellen dat een straat in een nieuwbouwwijk die net 1 dag geleden opgeleverd is er niet instaat.quote:
Het is wel iets meer dan een paar straten hoor.quote:Op woensdag 16 maart 2011 10:16 schreef GlowMouse het volgende:
Dat zijn helemaal niet alle straten van heel Nederland. Maar bij die paar straten die er wel instaan kun je het wel gebruiken.
En als hij er niet instaat ga je zelf splitten.quote:Op woensdag 16 maart 2011 10:16 schreef GlowMouse het volgende:
bij die paar straten die er wel instaan kun je het wel gebruiken.
Hmmm die x was gewoon willekeurig he...quote:Op dinsdag 15 maart 2011 21:15 schreef GlowMouse het volgende:
[..]
In dat geval zoek je [0-9x]*\.[0-9x]*, waarna je de x via str_replace uit het resultaat haalt.
Waarom geen 81.831?quote:1bnj4w8.0%81.83%1 ook 148.081
Ik zou 0 voor false en 1 voor true gebruiken. Maakt de code wel zo logischquote:Op woensdag 16 maart 2011 19:27 schreef GlowMouse het volgende:
0/1 voor true false, of ENUM('Y','N'), net wat je voorkeur is.
Geen idee, maar ik zou denken dat 0/1 sneller is omdat je in de code dan geen stringvergelijking hoeft te doen.quote:Op woensdag 16 maart 2011 20:48 schreef Chandler het volgende:
maar ik vraag me af wat sneller is een tinyint (voor boolean) of een enum met y/n of 0/1
Dan heb je volgens mij twee regexen nodig, en twee keer preg_replace. Eerst gooi je alles weg wat geen cijfer en/of punt is, daarna moet alles vanaf de tweede punt weg.quote:Op woensdag 16 maart 2011 13:30 schreef Dale. het volgende:
[..]
Hmmm die x was gewoon willekeurig he...
Hij moet van 1bnj4w8.0%81 ook gewoon 148.081 maken en van 1bnj4w8.0%81.83%1 ook 148.081
Er worden in database voor een enum veld wel eea aan trucje gebruikt lijkt me zo. Als je een vastgesteld aantaal waarden heb, dan kun je eigenlijk het daadwerkelijke type INT maken waarbij een onzichtbare tabel gebruikt voor de daadwerkelijke waardes. Zeg maar een soort snelkoppeling naar een foreign key.quote:Op woensdag 16 maart 2011 21:02 schreef Light het volgende:
[..]
Geen idee, maar ik zou denken dat 0/1 sneller is omdat je in de code dan geen stringvergelijking hoeft te doen.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |