MySQL: PLZ von Ort extrahieren
Maresa P.
- datenbank
Hallo liebes Forum,
ich habe in einer MySQL Datenbank in der Tabelle 'address' mehrere Adressen gespeichert.
Unter Anderem gibt es in der Tabelle eine Spalte 'City', welche derzeit die PLZ und den Ort der Adresse enthält.
Bspl. von Einträgen in der Spalte City:
| id | city |
----------------------
| 1 | 50968 Köln |
| 2 | 22043 Hamburg |
| 3 | 28213 Bremen |
Dies macht für meine Anforderungen wenig Sinn, da ich die PLZ eigenständig verarbeiten muss.
Ich habe nun der Tabbelle 'address' eine zweite Spalte 'zip' zugefügt in der die Postleitzahl abgespeichert werden soll.
also so:
| id | zip | city |
------------------------
| 1 | 50968 | Köln |
| 2 | 22043 | Hamburg |
| 3 | 28213 | Bremen |
Dummerweise sind in meiner Tabelle jedoch schon mehrere Hundert Datensätze vorhanden, welche ich nun anpassen muss. Natürlich könnte ich dies manuell machen, erscheint mir jedoch zu umständlich.
Frage: Kann ich die bestehenden Datensätze auch mit einer SQL Query automatisiert ändern? Wenn ja, wie muss dies query lauten.
Vielen Dank für Euere Hilfe!
Maresa P.
Hello,
| 1 | 50968 Köln |
Ist dieses Format verbindlich oder könnte da auch schon mal
| 97 | 20 Hamburg |
deinstehen?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
Frage: Kann ich die bestehenden Datensätze auch mit einer SQL Query automatisiert ändern? Wenn ja, wie muss dies query lauten.
schau dich mal bei den zeichenketten-funktionen im manual am, http://dev.mysql.com/doc/mysql/de/String_functions.html.
LEFT, SUBSTRING etc. könnten dir weiterhelfen.
allerdings solltest du Toms frage vorher klären, denn die antwort darauf entscheidet natürlich darüber, wie "einfach" das zu machen ist.
gruß,
wahsaga
mit SQL weiss ich nicht.
mit PHP kann man das allerdings ganz einfach gestalten, soweit du über ein wenig PHP-Kenntnisse verfügst und PHP auf dem Server/Rechner installiert ist.
<?
mysql_connect("<Datenbank>","<Benutzer>","<Passwort>");
mysql_select_db("<Datenbank-Name>");
$temp = mysql_query("SELECT id,city FROM adress") or die("Kein SELECT möglich");
while($x=mysql_fetch_row($temp)){
$id=$x[0];
$city=$x[1];
$zip,$city=explode(" ","$city"); // <- hier trennt er PLZ und Stadtnamen beim Leerzeichen, soweit natürlich eins vorhanden ist
mysql_query("UPDATE adress SET zip='$zip', city='$city' WHERE id='$id'") or die("Kein Update möglich");
}
mysql_close();
?>
natürlich muss vorher noch in MySQL die Spalte zip angelegt werden, ansonsten sollte es so klappen...
Hello,
das mit dem Leerzeichen ist eine gute Idee.
Dann schau Dir mal in MySQL die Funktion substring_index(s,f,n) an
s = string, der zerlegt werden soll
f = Zeichen, das gesucht wird
n = Zahl des Auftretens dieses Zeichens, also hier das erste.
Deine PLZ lautet dann substring_index(ort," ",1);
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Mit den tipps habt ihr grundsätzlich beide recht
was aber wenn der stadtname auch noch ein leerzeichen enthält
zb.: St. Pölten oder so???
das müsstest du also danach noch abprüfen
mfg gerhard
was aber wenn der stadtname auch noch ein leerzeichen enthält
das stimmt, dann würd ich das so machen:
$a=array();
$a=explode(" ","$city");
$zip=$a[0]; <= erster Eintrag ist die PLZ, also kein Leerzeichen enthalten
$z=1;
while($a[$z]){
$city.=$a[$z]." ";
}
// Solange ein Wert existiert, soll er in $city eingetragen werden.
$city=chop($city) // Das letzte Leerzeichen wird hiermit entfernt
mfg,
thomas
$z=1;
while($a[$z]){
$city.=$a[$z]." ";
hier kommt natürlich noch ein $z++; rein!!!!
}
Hallo Thomas,
$z=1;
while($a[$z]){
$city.=$a[$z]." ";
}
einfacher geht das mit:
list($plz,$ort) = explode(' ',$cityAusDb,2);
durch die 2 werden höchstens zwei Elemente zurückgegeben (->http://de3.php.net/explode) und du hast in $plz die Postleitzahl und in $ort den Ort stehen.
Grüße aus Nürnberg
Tobias
einfacher geht das mit:
list($plz,$ort) = explode(' ',$cityAusDb,2);
danke für die info.
ist nur schwierig, wenn man es einmal gelernt hat, dann was neues zu benutzen...werd mir aber mühe geben!!! ;-)
mfg,
thomas
yo,
einfacher geht das mit:
list($plz,$ort) = explode(' ',$cityAusDb,2);
noch einfacher geht es, wenn man wie bereits erwähnt mit einer konstanten länge der postleitzahlen zu tun hat oder aber das leerzeichen gleich in der sql abfrage benutzt, um beides zu trennen. php ist hier überflüssig. nach der stelle des ersten vorkommens eines leerzeichens suchen und dann mit substring teilen.
Ilja
Hello,
noch einfacher geht es, wenn man wie bereits erwähnt mit einer konstanten länge der postleitzahlen zu tun hat oder aber das leerzeichen gleich in der sql abfrage benutzt, um beides zu trennen. php ist hier überflüssig. nach der stelle des ersten vorkommens eines leerzeichens suchen und dann mit substring teilen.
Dafür gibt es substring_index()
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
yo,
Dafür gibt es substring_index()
komme mehr aus der oracle welt. wenn mysql so eine schöne funktion hat, dann ist ja alles butter. auf jeden fall ist php fehl am platz.
Ilja
Hello,
Dafür gibt es substring_index()
komme mehr aus der oracle welt. wenn mysql so eine schöne funktion hat, dann ist ja alles butter. auf jeden fall ist php fehl am platz.
Dafür hat Oracle andere schöne Sachen ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Ilja,
list($plz,$ort) = explode(' ',$cityAusDb,2);
noch einfacher geht es, wenn man wie bereits erwähnt mit einer konstanten länge der postleitzahlen zu tun hat oder aber das leerzeichen gleich in der sql abfrage benutzt, um beides zu trennen. php ist hier überflüssig.
das ist mir auch klar - ich wollte Thomas nur zeigen, dass das was er in php geschrieben hat sich auch einfacher lösen lässt. :-)
Grüße aus Nürnberg
Tobias
hi,
Mit den tipps habt ihr grundsätzlich beide recht
was aber wenn der stadtname auch noch ein leerzeichen enthält
zb.: St. Pölten oder so???
ist doch wurscht - ich möchte postleitzahl_leerzeichen_stadtnamemitbeliebigvielenleerzeichen zerlegen - also interessiert mich nur genau das erste leerzeichen, das zwischen PLZ und stadtname.
gruß,
wahsaga
Hallo Maresa,
Dummerweise sind in meiner Tabelle jedoch schon mehrere Hundert Datensätze vorhanden, welche ich nun anpassen muss. Natürlich könnte ich dies manuell machen, erscheint mir jedoch zu umständlich.
Frage: Kann ich die bestehenden Datensätze auch mit einer SQL Query automatisiert ändern? Wenn ja, wie muss dies query lauten.
kannst du sicher sein, dass du *immer* eine 5-stellige Postleitzahl hast? Wenn ja, kannst du es mal mit diesem Query versuchen:
UPDATE <tabelle> SET plz = SUBSTRING(stadt,1,5), stadt = SUBSTRING(stadt,6);
- oder du verwendest gleich http://opengeodb.de/
Grüße aus Nürnberg
Tobias