Oliver Linnhoff: Postleitzahl eingeben, dann alle Adressen ausgeben?

Hallo Leute,
ich habe da mal wieder ein kleines Problem, welches ich mit meinen *anfänger* Kenntnissen nicht zu lösen vermag.

Ich würde gerne eine Funktion auf meiner Homepage implementieren, wo jemand seine Postleitzahl eingibt, und ihm dann alle "fachhändler" in einem Bestimmten Umkreis angezeigt werden.

Ist das sehr schwer?

Danke,
Oliver

  1. Hallo Oliver,

    die technische Umsetzung dürfte weniger das Problem sein (bei wenigen etvl. JavScript, sonst PHP odgl.). Problematisch ist eher die Zuordnung von den PLZ-Bereichen. Je nach dem, wie dich die Händler sitzen musst Du für extrem viele PLZs einzeln deren Treffer definieren. Hast Du hingegen nur 10/15 Händler in Deutschland, so sind die Gebiete des einzelnen größer und leichter/grober absteckbar. Hast Du hingegen in München schon drei - viel Spaß.

    Grüße aus Würzburg
    Julian

  2. ich habe da mal wieder ein kleines Problem, welches ich mit meinen *anfänger* Kenntnissen nicht zu lösen vermag.

    Ich würde gerne eine Funktion auf meiner Homepage implementieren, wo jemand seine Postleitzahl eingibt, und ihm dann alle "fachhändler" in einem Bestimmten Umkreis angezeigt werden.

    Ist das sehr schwer?

    Hallo Oliver,

    kommt drauf an, wie genau Du es mit dem Umkreis nehmen willst.
    Du kannst z.B. die eingegebene Postleitzahl als Parameter an ein PHP-Skript übergeben, die erste Stelle der Plz nehmen und dort ne Datenbankabfrage machen in der Art
    SELECT name FROM haendler WHERE plz LIKE '$plz%'
    Dies ist mal ein Ansatz, es gibt bestimmt auch noch andere Möglichkeiten....ich kenn mich allerdings mit der Struktur der Postleitzahlen nicht aus.
    Wenn Du es ganz genau machen willst, dann bräuchtest Du irgendwie Koordinaten, mit denen Du rechnen kannst. Das kann dann natürlich auch ein von Dir festgelegtes Koordinatensystem sein.

    Viele Grüsse
    Kerstin

    1. Tach auch,

      kommt drauf an, wie genau Du es mit dem Umkreis nehmen willst.
      Du kannst z.B. die eingegebene Postleitzahl als Parameter an ein PHP-Skript übergeben, die erste Stelle der Plz nehmen und dort ne Datenbankabfrage machen in der Art
      SELECT name FROM haendler WHERE plz LIKE '$plz%'

      Hm, ich habe meine Zweifel dass das ausreicht. Es wird ja immer Gegenden geben wo in der direkten Nachbarschaft auch die erste Ziffer unterschiedlich ist. Die wuerdest Du mit Deiner Methode dann nicht erreichen.

      Dies ist mal ein Ansatz, es gibt bestimmt auch noch andere Möglichkeiten....ich kenn mich allerdings mit der Struktur der Postleitzahlen nicht aus.

      Ich auch nicht, aber einer meiner ersten Gedanken ist dass es irgendwo einen Uebergang zwischen 2xxxx und 3xxxx geben muss wo diese angrenzend sind. Was Deinen obigen Vorschlag in meinen Augen sehr problematisch macht.

      Wenn Du es ganz genau machen willst, dann bräuchtest Du irgendwie Koordinaten, mit denen Du rechnen kannst. Das kann dann natürlich auch ein von Dir festgelegtes Koordinatensystem sein.

      Oder irgendeine Art Datenbank die weiss welche PLZbereiche an einen bestimmten angrenzen.

      Gruss,
      Armin

      1. Hallo,

        kommt drauf an, wie genau Du es mit dem Umkreis nehmen willst.
        Du kannst z.B. die eingegebene Postleitzahl als Parameter an ein PHP-Skript übergeben, die erste Stelle der Plz nehmen und dort ne Datenbankabfrage machen in der Art
        SELECT name FROM haendler WHERE plz LIKE '$plz%'

        Hm, ich habe meine Zweifel dass das ausreicht. Es wird ja immer Gegenden geben wo in der direkten Nachbarschaft auch die erste Ziffer unterschiedlich ist. Die wuerdest Du mit Deiner Methode dann nicht erreichen.

        Stimmt, da hab ich noch gar nicht dran gedacht und ausserdem ist der Umkreis auch sehr gross, wenn man nur nach der ersten Stelle sucht. War mal die erste Idee.

        Oder irgendeine Art Datenbank die weiss welche PLZbereiche an einen bestimmten angrenzen.

        Das stell ich mir aber relativ kompliziert vor, geht das nicht schon in Richtung PL/SQL? Und das dann z.B. in PHP/MySQL umzuschreiben, dürfte nicht ganz einfach sein. Aber wie Julian auch gesagt hat, kommt es eben auf die Anzahl der Händler an und wie die verteilt sind.

        viele Grüsse
        Kerstin

        1. Hi Kerstin,

          Oder irgendeine Art Datenbank die weiss welche PLZbereiche an einen
          bestimmten angrenzen.
          Das stell ich mir aber relativ kompliziert vor, geht das nicht schon in
          Richtung PL/SQL?

          Eine Abfrage einer Tabelle ist und bleibt erst mal eine Abfrage - dafür reicht normales SQL.

          PL/SQL ist eine Sprache, die sich dafür eignet, in ihr geschriebenen Code _in_ der Datenbank selbst _abzuspeichert_ und dessen Ausführung an Ereignisse der Datenbank selbst zu _binden_.

          Stell Dir mal vor, Du willst eine Protokollfunktion realisieren, welche Dir festhält, wann eine Anwendung lesend bzw. schreibend auf welche Datensätze einer Tabelle zugegriffen hat - und das für beliebige Anwendungen, deren Quelltext Du weder kennst noch ändern darfst! Dir "gehören" aber die Tabellen - Du bist der Administrator der Datenbank.

          In einem solchen Falle könntest Du eine entsprechende Funktion in PL/SQL schreiben (welche ihre Protokolldaten dann in eine eigene Log-Tabelle INSERTed) und den Aufruf dieser Funktion per Trigger an die entsprechenden  Ereignisse (nämlich das SELECT bzw. INSERT der jeweiligen Tabelle) binden.
          Die Anwendungen merken gar nicht, daß sie "belauscht" werden - das geht sie auch gar nichts an. (Genau wie es ein CGI-Skript nichts angeht, welche Protokollinformationen ein Webserver über deren Aufrufe mitführt.)

          So etwas wäre eine Anwendung, für die PL/SQL prima geeignet ist - und das mit mySQL nachzubauen stelle ich mir (mit allerdings nur rudimentären mySQL-Kenntnissen) in der Tat nicht trivial vor.

          Viele Grüße
                Michael

          1. Hallo Michael

            Oder irgendeine Art Datenbank die weiss welche PLZbereiche an einen
            bestimmten angrenzen.
            Das stell ich mir aber relativ kompliziert vor, geht das nicht schon in
            Richtung PL/SQL?

            Eine Abfrage einer Tabelle ist und bleibt erst mal eine Abfrage - dafür reicht normales SQL.

            Vielleicht hab ich mich etwas ungeschickt ausgedrückt, ich wollte eigentlich nur sagen, dass es meines Wissens mit einer einfachen SQL-Abfrage nicht möglich ist (vielleicht irre ich mich da ja auch), aus einer Tabelle, in der die Plz und die angrenzenden Postleitzahlen gespeichert sind, die PLZ-Bereiche zwischen dem Ort des Kunden und des Händlers zu erfahren. Vor allem, wenn man vorher nicht weiss, wieviel Bereiche dazwischen liegen.
            Vielleicht denk ich ja auch viel zu kompliziert, aber ich hätte dann von der eingegebenen plz die angrenzenden bereichen abgefragt und von jedem diesem Bereich wieder die angrenzenden Bereiche, bis ich an der Grenze des gewünschten Umkreises angelangt bin und alle Postleitzahlen hab, in denen ich nach Händlern suchen kann. Ich bin davon ausgegangen, das dafür Rekursionen benötigt werden, die SQL nicht bietet, die man aber mit PL/SQL realisieren kann. Deshalb bin ich da auch auf PL/SQL gekommen, weil ich was ähnliches mal so gelöst hab.

            viele Grüsse
            Kerstin

            1. Hi Kerstin,

              Vielleicht hab ich mich etwas ungeschickt ausgedrückt, ich wollte
              eigentlich nur sagen, dass es meines Wissens mit einer einfachen
              SQL-Abfrage nicht möglich ist (vielleicht irre ich mich da ja auch),
              aus einer Tabelle, in der die Plz und die angrenzenden Postleitzahlen
              gespeichert sind, die PLZ-Bereiche zwischen dem Ort des Kunden und
              des Händlers zu erfahren. Vor allem, wenn man vorher nicht weiss,
              wieviel Bereiche dazwischen liegen.

              da stimme ich Dir ja völlig zu.

              Nur würde ich in diesem Falle nicht als erstes eine neue Programmier-
              sprache vorschlagen, sondern die vorliegenden Datenstrukturen hinter-
              fragen.

              Denn wenn die erforderliche Information _überhaupt_nicht_ verfügbar
              ist, hilft die beste Programmiersprache nichts.
              Ist sie aber verfügbar, dann ist es effizienter, sie so darzustellen,
              wie die Anwendung das verlangt, als um eine mißratene Informations-
              darstellung aufwändig herum zu programmieren. (Schon alleine, weil
              ich keine Lust hätte, in der Dokumentation detailliert zu erklären,
              wieso das alles so kompliziert und wartungsunfreundlich ist ... ;-)

              Vielleicht denk ich ja auch viel zu kompliziert, aber ich hätte dann
              von der eingegebenen plz die angrenzenden bereichen abgefragt und von
              jedem diesem Bereich wieder die angrenzenden Bereiche, bis ich an der
              Grenze des gewünschten Umkreises angelangt bin und alle Postleitzahlen
              hab, in denen ich nach Händlern suchen kann. Ich bin davon ausgegangen,
              das dafür Rekursionen benötigt werden, die SQL nicht bietet, die man
              aber mit PL/SQL realisieren kann. Deshalb bin ich da auch auf PL/SQL
              gekommen, weil ich was ähnliches mal so gelöst hab.

              Ich habe Deinen Vorgehensweise ja auch gar nicht kritisieren wollen.
              Mit meiner Vorgehensweise bin ich einfach zu einem anderen Ergebnis
              gekommen ...

              Viele Grüße
                    Michael

              1. Hallo Michael,

                Ich habe Deinen Vorgehensweise ja auch gar nicht kritisieren wollen.
                Mit meiner Vorgehensweise bin ich einfach zu einem anderen Ergebnis
                gekommen ...

                Kritik ist ja nix schlechtes und wenn sie konstruktiv und angebracht ist, lernt man dadurch ja auch ne Menge und dafür ist das Forum ja da :-)

                viele Grüsse
                Kerstin

  3. Hi!
    Sehe das genau wie Julian, ich würde mir einmal die Arbeit machen, die Postleutzahlen von Hand zuzuweisen. Was Dir dabei helfen könnte:

    http://www.deutschepost.de/postdirekt/index.html?inhalt=/postdirekt/produkte/plzinfo.html

    http://www.deutschepost.de/postdirekt/index.html?inhalt=/postdirekt/produkte/plzkarte.html

    Wo bei ich bei letzterem etwas stutze, klickt mal auf "Ausschnitt vergrößern" - woher weiß die Post um Himmels Willen das ich in Aachen bin??? Geht das bei Euch auch??? Wie machen die das????

    Viele Grüße
    Andreas

    1. Hallöle,

      Wo bei ich bei letzterem etwas stutze, klickt mal auf "Ausschnitt vergrößern" - woher weiß die Post um Himmels Willen das ich in Aachen bin??? Geht das bei Euch auch??? Wie machen die das????

      Das ist Zufall. Bei mir kommt auch die Karte mit Aachen, aber da komm ich *definitiv* nicht her - eher aus dem südlichsten Süden der Republik. War also wohl eher ein Glückstreffer...

      Liebe Grüße,

      Nicole

    2. Hallo Andreas,

      Wo bei ich bei letzterem etwas stutze, klickt mal auf "Ausschnitt vergrößern" - woher weiß die Post um Himmels Willen das ich in Aachen bin??? Geht das bei Euch auch??? Wie machen die das????

      Könnte es einfach sein, dass Orte mit "A" in alphabetisch sortieren Listen vorne stehen? Und dort wiederum nach alphabet sortiert die mit "a" an zweiter Stelle ganz vorne, und dann mit "c" an dritter Stelle? Wieviel Orte gibt's denn, die durch ihre drei Anfangsbuchstaben vor Aachen stehen?

      Grüße aus Würzburg (!= Aachen)
      Julian

  4. http://www.ihre-vorsorge.de/tool_beratungsstellen/index.php

    Hier liegt wie bei x-scout.de etc. eine geographische PLZ-Datenbank dahinter:

    01067;Dresden;13.7194;51.0626
    01069;Dresden;13.7383;51.0392
    01097;Dresden;13.7428;51.0687
    01099;Dresden;13.8301;51.0957
    01108;Dresden;13.7893;51.1566
    01109;Dresden;13.7707;51.1238
    01127;Dresden;13.7347;51.0815
    etc.

    Dann muss Du noch eine SQL-Abfrage zimmern, aber der "Satz des Pythagoras" dürfte aus dem Mathematikunterricht bekannt sein ;-)

    Peter M.

    Hallo Leute,
    ich habe da mal wieder ein kleines Problem, welches ich mit meinen *anfänger* Kenntnissen nicht zu lösen vermag.

    Ich würde gerne eine Funktion auf meiner Homepage implementieren, wo jemand seine Postleitzahl eingibt, und ihm dann alle "fachhändler" in einem Bestimmten Umkreis angezeigt werden.

    Ist das sehr schwer?

    Danke,
    Oliver

    1. Hi!

      01067;Dresden;13.7194;51.0626
      01069;Dresden;13.7383;51.0392
      01097;Dresden;13.7428;51.0687
      01099;Dresden;13.8301;51.0957
      01108;Dresden;13.7893;51.1566
      01109;Dresden;13.7707;51.1238
      01127;Dresden;13.7347;51.0815
      etc.

      Und woher bekommt man so eine Tabelle?

      Dann muss Du noch eine SQL-Abfrage zimmern, aber der "Satz des Pythagoras" dürfte aus dem Mathematikunterricht bekannt sein ;-)

      Was hat das mit dem "Satz des Pythagoras" zu tun? Nicht eher mit sin und cos?

      Grüße
      Andreas

      1. Hallo!
        Hab zwar noch nichts gefunden, aber ich habe mich aus versehen bei einem Suchbegriff(Datenbak) vertippt, und dann das:
                                 ^

        Ihr ursprüngliches Suchwort: PLZ Datenbak mit Koordinaten download wurde falsch geschrieben und ergab 0 Resultate.
        Stattdessen wurde das korrigierte Suchwort PLZ Datenbank mit Koordinaten download benutzt und führte zu den unten aufgelisteten Ergebenissen.

        Nicht schlecht, oder?

        Grüße
        Andreas

        Hi!

        01067;Dresden;13.7194;51.0626
        01069;Dresden;13.7383;51.0392
        01097;Dresden;13.7428;51.0687
        01099;Dresden;13.8301;51.0957
        01108;Dresden;13.7893;51.1566
        01109;Dresden;13.7707;51.1238
        01127;Dresden;13.7347;51.0815
        etc.

        Und woher bekommt man so eine Tabelle?

        Dann muss Du noch eine SQL-Abfrage zimmern, aber der "Satz des Pythagoras" dürfte aus dem Mathematikunterricht bekannt sein ;-)

        Was hat das mit dem "Satz des Pythagoras" zu tun? Nicht eher mit sin und cos?

        Grüße
        Andreas