Postleitzahlen MySQL-Dump

JohannesR

Erfahrenes Mitglied
Hallo,

ich bin auf der Suche nach einem MySQL-Daten-Dump für eine Postleitzahlen-Tabelle. Hat einer von euch sowas an der Hand, oder muss ich mir die alle selber raussuchen und eintippen? :)

Beispiel:
Code:
+-------+-----------+
| PLZ   | Ort       |
+-------+-----------+
| 33613 | Bielefeld |
| 33739 | Bielefeld |
+-------+-----------+
 
Hallo!

Welchen Tabellennamen und welche Spaltennamen hättest Du denn gerne?
Willst Du nach Postleitzahl sortiert eintragen oder lieber nach Ort?
Die max_execution_time kannst ggf. Du höher stellen?

Gruss Dr Dau
 
Dr Dau hat gesagt.:
Hallo!

Welchen Tabellennamen und welche Spaltennamen hättest Du denn gerne?
Willst Du nach Postleitzahl sortiert eintragen oder lieber nach Ort?
Die max_execution_time kannst ggf. Du höher stellen?

Gruss Dr Dau
Spalten- und Tabellenname ist mir völlig wurscht, es geht nur darum, meine Adress-Tabellen zu normalisieren... :)

@vop: Danke, aber ich finde da nur win32-Programme, mit denen ich nichts anfangen kann. ;)
 
So, folgendes hat sich ergeben:
1. Dadurch dass ich den Spaltentyp für "PLZ" von "varchar" auf "int" umgestellt hatte, wurden alle führenden Nullen der Postleitzahlen entfernt.

2. Beim Import über den Dateiupload von phpMyAdmin wurden alle Zeichen der Ortsnamen ab dem Umlaut (sofern vorhanden) entfernt.
Solltet ihr die Datensätze also über den Upload importieren, müsst ihr bei "Zeichencodierung der Datei" auf "latin1" umstellen.
Dieses wirkt sich nicht auf die Kollation (UTF-8) der Tabelle "orte" bzw. der Spalte "Ort" aus, sondern dient nur der korrekten Zeichenerkennung der SQL-Dateien.

3. Bei dieser Gelegenheit habe ich gleich mal die Scripte von Dennis getestet.
Sowohl der Import als auch der Export funktionieren tadellos..... und dass sogar mit einer sehr guten Geschwindigkeit, so dass ihr eigentlich keine Probleme mit der max_execution_time (meisst 30 Sekunden) bekommen solltet.
Somit sind die SQL-Dateien nun auch nach der Anfangszahl der Postleitzahl aufgeteilt.
Die Aufteilung entspricht jedoch nicht den Bundesländern, sondern den Postleitzonen (so nenne ich es jetzt mal ;) ).
Näheres zu der Aufteilung der Zonen könnt ihr euch hier ansehen.

Was Dennis sein Import-Script betrifft, habe ich beide Klassen (unter PHP5) getestet (Dateinamen der Klasse ggf. anpassen).

Dennis hatte mir noch mitgeteilt dass er Probleme mit "DEFAULT CHARSET=utf8" hatte, dieses Problem liess sich für mich aber nicht reproduzieren.
Jedenfalls hat Dennis sein Script entsprechend angepasst ("DEFAULT" wurde entfernt) und auch ich habe die "create_table.sql" gefixt, was problemlos funktioniert.

Es müssen insgesamt 44.188 Datensätze sein.
Der letzte Datensatz muss "99998 Körten" lauten, sollte hier nur "99998 K" stehen habt ihr wahrscheinlich ein Fehler beim importieren gemacht (s.o.).

So, nun hoffe ich dass alle Probleme behoben sind und hänge die gefixten SQL-Dateien mit an. ;)
 

Anhänge

  • plz_dump_teil_1.zip
    119,7 KB · Aufrufe: 12.526
  • plz_dump_teil_2.zip
    113,3 KB · Aufrufe: 1.829
Zuletzt bearbeitet:
So, ich hab da noch was beizutragen.
Die Sortierung der SQL-Files gefiel mir nicht so ganz, daher hab ich mal ein kleines Export-Script gebastelt um die Dateien so anzulegen, dass die nach Postleitzahlen sortiert sind und die einzelnen Files die jeweiligen Bundeslaender enthalten.

Und da ich dann schonmal dabei war hab ich dann noch ein Import-Script hinterher geschoben.
Das Import-Script erwartet die SQL-Files im Unterverzeichnis dump.
Die Klasse die ich im Import-Script genutzt hab gibt's hier.

plzdbexport.php
PHP:
<?php
$host="";
$username="";
$password="";
$database="";
$db=mysql_connect($host,$username,$password);
mysql_select_db($database,$db);
echo 'Writing create_table.sql<br>';
$file=fopen("create_table.sql","w");
fwrite($file,"CREATE TABLE `orte` (`id` INT(11) NOT NULL AUTO_INCREMENT,`PLZ` INT(5) UNSIGNED ZEROFILL NOT NULL DEFAULT '0',`Ort` VARCHAR(50) NOT NULL DEFAULT '-',PRIMARY KEY (`id`)) ENGINE=MyISAM CHARSET=utf8;\r\n");
fclose($file);
for ($x=0;$x<10;$x++)
	{
		echo 'Writing plz'.$x.'.sql<br>';
		flush();
		$file=fopen("plz".$x.".sql","w");
		$orte=mysql_query("select * from orte where PLZ>".(($x*10000)-1)." and PLZ<".(($x*10000)+10000)." order by PLZ",$db);
		while ($ort=mysql_fetch_assoc($orte))
			{
				fwrite($file,"INSERT INTO `orte` VALUES ('','".$ort['PLZ']."','".$ort['Ort']."');\r\n");
			}
		fclose($file);
	}
mysql_close($db);
?>
plzdbimport.php
PHP:
<?php
$host="";
$username="";
$password="";
$database="";
require_once("directorylist.php4class.php");
$db=mysql_connect($host,$username,$password);
mysql_select_db($database,$db);
$dirlist=new directorylist("dump",true,true);
for ($x=0;$x<count($dirlist->files);$x++)
	{
		echo 'Importing '.$dirlist->files[$x].'<br>';
		flush();
		$file=fopen("dump/".$dirlist->files[$x],"r");
		$content=fread($file,filesize("dump/".$dirlist->files[$x]));
		fclose($file);
		if ($dirlist->files[$x]!='create_table.sql')
			{
				$statements=explode("\r\n",$content);
				for ($y=0;$y<count($statements);$y++)
					{
						mysql_query($statements[$y],$db);
					}
			}
		else
			{
				mysql_query($content,$db);
			}
	}
unset($dirlist);
mysql_close($db);
?>

Hab den Thread auf Wunsch vom Doc nochmal aufgemacht damit noch Anpassungen gemacht werden koennen.
Auf die Info in seiner PN hin hab ich auch noch mal das Export-Script ueberarbeitet sodass das PLZ-Feld nun fuehrende Nullen bekommt um immer 5-stellige Werte zu enthalten.
Und auf Wunsch wieder geschlossen. ;)
Und wieder geoeffnet...

Ich lass jetzt mal auf, falls durch die Aenderungen Fragen oder Probleme aufkommen sollten.
 
Hat jemand die SQL-Dump auch mit den übergeordneten Regionen ?

z.B.
Bundesland | Bezirk | Landkreis | Ort | PLZ

des währe optimal
 
Zurück