U mkreissuche -> join auf kundendatenbank

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • U mkreissuche -> join auf kundendatenbank

    Hallo Comunity,

    ich habe mal wieder ein kleines Denkproblem.

    Ich habe 2 Tabellen in einer Datenbank.
    DIe Erste beinhaltet Postleitzahlen von GeoNames, die 2. beinhaltet Kundendaten.
    Diese beiden Tabllen lassen nur anhand der PLZ miteinander verknüpfen.

    Nun habe ich mir eine Funktion für die Umkreissuche geschrieben, die auch recht flott alle Werte die ich brauche aus der GeoDB zurückgibt.
    Die Funktion gibt mir ein Array zurück, in dem unter anderem die PLZ der Orte im Umkreis steht. Aus Performancegründen kann ich hier eine maximale Anzahl an Antworten angeben.

    Problem ist allerdings, das nicht alle PLZ in der GeoDB auch in unserer Kundendatenbank sind. (GeoDB ca 300.000 Datensätze, Kundendatenbank ca 5.000)

    Mit einem InnerJoin auf die Kundendatenbank bei der Umkreissuche dauert die Abfrage einfach viel zu lange.
    Das Array auf die Kundendatenbank jagen um zu sehen welche PLZ davon auch in der Kundendatenbank stehen würde das Ergenbniss (z.B. max 25 Datensätze) ja fäschen.

    Habt Ihr einen schlauen Denkanstoss für mich ?
    Zuletzt geändert von ; 22.01.2009, 11:08.

  • #2
    hab nun ein einigermaßen schnellen sql hinbekommen

    trotzdem danke fürs lesen

    Kommentar


    • #3
      Und was war dein Lösungsansatz?
      Für Leute mit ähnlichen Problemen.

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        arbeite das kurz auf und poste gleich meinen code.
        Hab nur noch ein kleines count problem

        Kommentar


        • #5
          tja, da hab ich den mund wohl zu voll genommen :P

          bin wieder am anfang und meine datenbank zeigt mir nen vogel.

          die eigentlich recht schnelle abfrage nur an die geodn sieht so aus:

          http://www.urlaubsuche-deutschland.de/geo1.php

          code dazu:
          http://www.urlaubsuche-deutschland.de/zeige.php


          wenn ich nun einen innerjoin auf unsere kundendb einfüge:

          inner join (select onummer, oort, oplz from `".DBTBLPREFIX."Objektstamm` ) AS b on a.plz = b.oplz

          dauert die abfrage länger als ne tasse kaffee

          Kommentar


          • #6
            Warum legst du nicht einfach einen Cache des Ergebnisses an?
            Wenn ein neuer Kunde dazu kommt muss du natürlich den Cache entsprechend aktualisieren.


            Ansonsten bietet sich noch ein ganz anderer Weg an:
            Du koppelst Umkreissuche an PLZ. Das eine hat aber mit dem anderen spontan mal nix zutun. (20 Meter weiter ist bei mir ein anderer Ort, das ist zwar nah, die PLZ unterscheidet sich trotzdem schon ab der 3. Stelle).
            Du kannst auch zu jedem Benutzer den Längen- und Breitengrad speichern (PLZ -> Grade) und dann mit einer tollen Formel, die du dir ergoogelst, alle Benutzer in einem Umkreis von einem bestimmten Punkt (den du dir erneut mit Längen- und Breitengrad spezifizierst) selektieren.

            Du brauchst dann nur noch eine große DB, welche dir die PLZs auf die Grade mappt, und eine tolle Formel+hoffentlich mögliche Indizes auf deine sowieso vorhandene Tabelle.

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              danke für die fixe antwort.

              ich versuchs mal andersrum zu erklären

              ich brauche NICHT die geodaten (längen und breitengrad) von jedem kunden.
              ich habe lediglich einen ort (anhand der plz) von dem ich ja mit meiner funktion get_lat_lon den längen und breitengrad bekomme.

              nun brauche ich alle orte in einem bestimmten umkreis. funktioniert prima über die funktion umkreis.

              das einzige was ich nun noch wissen muss ist, ob in diesen orten aus der funktion umkreis mindestens ein kunde sitzt.
              EDIT:
              also eine abfrage, ob die gefundene PLZ von umkreis in meiner kundendatenbank existiert

              ist mit nem 2. sql kein problem.
              aber:
              wenn ich nun umkreis mit einer maximalen anzahl von 50 ergebnissen aufrufen will, danach den 2. sql auf meine kundendatenbank abschiesse, die wiederum aber nur 30 übereinstimmungen hat, könnte ich ja nie genau sagen, welche 50 orte denn nun in der nähe von dem ursprungsort sind in denen auch kunden sitzen.

              ich hoffe ich habs möglichst schlau rüber gebracht :P
              Zuletzt geändert von ; 22.01.2009, 14:45.

              Kommentar


              • #8
                Für alle, die es noch interessiert.

                ich habe die Abfrage nun doch mit einem 2. SQL abgeschickt


                code dazu:
                http://www.urlaubsuche-deutschland.de/zeige.php

                ergebniss ist annehmbar schnell:

                http://www.urlaubsuche-deutschland.de/geo1.php

                EDIT:

                ich brauche die postleitzahlen bzw die später daraus resultierenden orte für eine darstellung in google maps.
                wer dazu noch fragen hat, möge mich einfach anschreiben

                Zuletzt geändert von ; 22.01.2009, 16:20.

                Kommentar

                Lädt...
                X