Ich checke es nicht!!!

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

  • Ich checke es nicht!!!

    Hallo an alle,

    ich habe da ein Problem, was mich nicht mehr schlafen lässt.

    Ich habe 2 tabellen, eine mit Geodaten plz/länge/breite. Hier mache ich eine Umkreissuche, die auch einwandfrei funktioniert.
    Eine weitere Tabelle enthält die eigentlichen Daten, die mit der Umkreissuche ausgegeben werden sollen. Auch diese Verknüpfung stellt kein Problem dar.

    Doch ist es so, dass ich in manchen Städten, gerade Berlin und München, mehr als 200 Datensätze habe, die in der Umkreissuche ausgegeben werden.

    Hier soll eine google ähnliche Navigation eingebaut werde. Auch dieses Prinzip ist klar und funktioniert, wenn ich eine "feste" plz angebe, jedoch nicht, wenn die Daten dynamisch aus der ersten Abfrage kommen.

    Das Problem:

    Wie kann ich diese beiden Scripte verbinden. Die Postleitzahlen / Umkreissuche arbeitet in der Ausgabe mit:

    foreach ($treffer as $value => $wert) {
    ...
    }

    Die anschließende Verknüpfung geht mit:

    $sql = "SELECT name, strasse, plz, ort,url
    FROM x_kd where plz = $value";



    Wenn ich nun hier ein Array baue und eine weitere sql Abfrage einbaue, die mir per array die betreffenden plz's ausgibt, habe ich das Problem, dass es mir bei einer WHERE ... IN Abfrage die Reihenfolge zerhaut, da er die Datensätze in der Tabelle der Reihenfolge nach abarbeitet und dann (Entfernungsangaben sind mit dabei) diese nicht mehr in der richtigen Reihenfolge angibt.

    Da wir ja nach dem plz Suche statement noch einige Ecken und Radiusberechnungen zu erledigen haben, wüsste ich auch nicht, wie ein join Befehl aussehen sollte.

    Das einzige, was ich noch nicht ausprobiert habe ist ein array aus den gefundenen ID's zu machen, da jede nur einmal vorkommt (im Gegensatz zur PLZ) wäre das wohl besser, doch dann muss ich für jeden Datensatz nochmal eine Entfernungsberechung machen, was die Performance zu stark beeinflusst. Außerdem habe ich dann immer noch das Problem des "Sortierens nach Entfernung", da er sicherlich wieder die Datenbank vom ersten bis zum Letzten Datensatz durchgeht und nicht in der Reihenfolge des Arrays.

    Hat jemand von Euch schon mal so ein Problem gelöst, also generell eine Umkreissuche mit pagination (google Navigation)???

    Wäre toll, wenn ich was von Euch hören würde.

    Danke
    Zuletzt geändert von Jermaine; 19.09.2005, 16:53.

  • #2
    ich raff zwar trotz der vielen worte nicht wirklich, was und wie du versuchst zu verbinden. Aber warum liest du erst alle treffer in ein array ein?

    Thema JOINs! Informier dich mal im SQL-Forum.

    Eigentlich solltest du nur eine einzige Query und kein einziges Array benötigen. Sortierung nach umkreis, etc. findet alles MySQL-seitig statt.

    Danach kannst du alles über ne while-Schleife ausgeben.

    Achso, "pagination (google Navigation)", darum scheints dir ja zu gehen. Damit meinst du ne einfach "Blättern"-Funktion? Such einfach mal nach dem Begriff. Lässt sich auch ganz einfach in die Query einbauen.

    Du musst einfach weg von deiner Array-Lösung. das macht dir alles einfacher.

    Kommentar


    • #3
      @Tobiaz

      jeder einzelne Part, also Umkreissuche, Verknüpfung mit Daten aus zweiter Tabelle und Pagination funktioniert schon in sich, nur nicht in einem Script und mit den dynamischen Daten die bei der Umkreissuche ausgegeben werden.

      Dass ein arry nicht optimal ist, ist mir klar, doch habe ich bei der Umkreissuche/Entfernungsberechung ja eine Ausgabe von einigen Postleitzahlen, in der Datentabelle aber je Postleitzahl teilweise bis zu 100 Datensätze. Und die Entfernungsberechung findet NACH der sql Abfrage in den Geodaten statt. Wie soll ich das verbinden?

      Richtig, mir geht es um pagination!
      Zuletzt geändert von Jermaine; 19.09.2005, 12:52.

      Kommentar


      • #4
        Dass ein arry nicht optimal ist, ist mir klar, doch habe ich bei der Umkreissuche/Entfernungsberechung ja eine Ausgabe von einigen Postleitzahlen, in der Datentabelle aber je Postleitzahl teilweise bis zu 100 Datensätze. Und die Entfernungsberechung findet NACH der sql Abfrage in den Geodaten statt. Wie soll ich das verbinden?
        Na, über ein Join würde ich sagen. Es sei denn, ich habe dich total falsch verstanden.

        such mal nach blätterm im forum, sicher kannst du die lösungen, die zwar größten teils auf sql-ergebnissen basieren, auf deine array-lösung umstricken. das prinzip bleibt natürlich gleich. NUR, mit deiner Variante wirst du NIEMALS(!) eine performante Lösung hinbekommen. Darauf solltest du jedoch achten, wenn du von bis zu 100 DS pro PLZ redest.

        Kommentar


        • #5
          @TobiaZ

          Ich verstehe was Du meinst und ich weiß auch, wie eine Blätter Funktion zu schreiben und Einzubauen ist, doch wie Du schon sagtest, benötige ich dabei EINE sql Abfrage. Doch habe ich hier 2. Eine zum Ermitteln edr betreffenden PLZ's und eine zum Ermitteln der Datensätze zu der zuvor ermittelten PLZ.

          Genau das ist mein Problem.

          Die array Lösung habe ich gerade gecheckt. Die Performance passt Schon, doch habe ich wieder keine Möglichkeit die Datensätze nach Entfernung zu sortieren, da bei der WHERE IN Abfrage die Reihenfolge der Datensätze in der Tabelle abgearbeitet wird, also er prüft jeden Tabellendatensatz gegen mein array und nicht mein array gegen die Tabellendatensätze, aber nur so ist die Reihenfolge richtig.

          Order BY plz geht auch nicht, da die Postleitzahlen komplett durcheinander sein können also 80807, 80331, 80805.

          ICH KRIEG DIE KRISE!!!

          Normalerweise habe ich keine Probleme mit sql Abfragen. Die bestehenden scripts mit Ausgabe waren in 30 Minuten geschrieben, doch hier dran sitze ich schon 10 Stunden!

          Ich habe auch schon gegoogled, doch hier haben alle witzigerweise die Datensätze alle auf EINER Seite ausgegeben.

          Die einzigen, die ich gesehen habe, die eine Seitennavigation mit passender Entfernung haben ist www.mobile.de in der Erweitererten Suche.
          Zuletzt geändert von Jermaine; 19.09.2005, 13:40.

          Kommentar


          • #6
            Original geschrieben von Jermaine
            doch habe ich wieder keine Möglichkeit die Datensätze nach Entfernung zu sortieren, da bei der WHERE IN Abfrage die Reihenfolge der Datensätze in der Tabelle abgearbeitet wird, also er prüft jeden Tabellendatensatz gegen mein array und nicht mein array gegen die Tabellendatensätze, aber nur so ist die Reihenfolge richtig.

            Order BY plz geht auch nicht, da die Postleitzahlen komplett durcheinander sein können also 80807, 80331, 80805.
            warum lässt du dann nich einfach den query die tabelleneinträge sortieren, wenn er gegen deinen array die werte vergleicht... ? einfach nach den plz sortieren lassen, und dann müsstest doch gehen, oder verstehe ich dein problem noch nich wirklich richtig?


            mfg

            Kommentar


            • #7
              Nein, das geht leider nicht, da die Reihenfolge der PLZ nicht mit auf- oder absteigend das richtige Ergebnis bringt. Relevant hierfür ist die Reihenfolge der plz in dem array, aber ich kann ja nicht nach dem array sortieren.

              Kommentar


              • #8
                ja, und wie kommen diese in den array? dann sortiere doch den array! oder lass den query sortieren, bevor du in den array schreibst!

                mfg

                Kommentar


                • #9
                  Das habe ich ja gemacht, ich habe die richtige Reihenfolge im array, doch wenn ich jetzt die Datenbank abfrage mit WHERE IN, hilft mein sortiertes array nicht, denn er vergleicht tabelleneinträge mit arraywerten und so kann es sein, dass die plz von Eintrag 2341 im array ist und die Anweisung wird gültig. Eintrag 2341 ist aber auch gültig, nur ist die Entfrenung kürzer, sollte also als erstes ausgegeben werden (was im array auch so definiert war) tut er aber nicht, weil er diesen Eintrag als zweites gefunden hat.

                  Kommentar

                  Lädt...
                  X