Hilker: mySQL Daten die in einen bestimmten bereich fallen

Hallo Forum,

Ich möchte aus einer Tabelle Datensätze zusammenfassen, die sich in einem Bereich finden. Also z.B. +-10, gibt es da irgendeine Möglichkeit?
Ich suche mich schon im Manual zu tode, habe aber bisher nichts passendes entdecken können. Lässt sich soein Bezug überhaut herstellen?

mfG der Hilker

  1. Hallo Hilker,

    Also z.B. +-10, gibt es da irgendeine Möglichkeit?

    ...
    WHERE daten >= -10 AND daten <= 10

    meinst du das?

    Kalle

    1. Hallo Hilker,

      Hallo Kalle!

      Also z.B. +-10, gibt es da irgendeine Möglichkeit?

      ...
      WHERE daten >= -10 AND daten <= 10

      meinst du das?

      Nein, das ist ja einfach :)
      siehe meine antwort auf Kris...

      Kalle

  2. Ich möchte aus einer Tabelle Datensätze zusammenfassen, die sich in einem Bereich finden. Also z.B. +-10, gibt es da irgendeine Möglichkeit?

    die gibt es ... nur wäre es weitaus hilfreicher wenn du deine Frage detaillierter stellst. Du möchtest also bestimmte Werte aus einer DB wiedergeben die +-10 sind ?
    oder wie darf ich das "zusammenfassen" verstehen ?

    Lässt sich soein Bezug überhaut herstellen?

    klar ... denn mächtig ist die Datenbak ;)

    1. Ich möchte aus einer Tabelle Datensätze zusammenfassen, die sich in einem Bereich finden. Also z.B. +-10, gibt es da irgendeine Möglichkeit?
      die gibt es ... nur wäre es weitaus hilfreicher wenn du deine Frage detaillierter stellst. Du möchtest also bestimmte Werte aus einer DB wiedergeben die +-10 sind ?

      Das wäre ja einfach...
      Ich möchte Werte zusammenfassen die im Bereich +-10 liegen....

      oder wie darf ich das "zusammenfassen" verstehen ?

      Also, angenommen ich habe eine tabelle mit einer spalte 'zahlen' und eine spalte 'buchstaben'. Die Tabelle hat 100Reihen in Spalte 'zahlen' stehen die ganzzahlen von 1-100, in der buchstabenspalte die buchstaben von a-Za-Z
      nehmen wir in diesem Fall mal +-1 an...

      nun möchte ich aus der 'buchstaben' spalte, die buchstaben zu 3er blöcken zusammengefasst haben, die Ergebnismenge sollte dann so ähnlich wie dieses aussehen:

      buchst. | z+-1
      ---------+---------
          a    | 1-3
          b    | 1-3
          c    | 1-3
          d    | 4-6
          e    | 4-6
          f    | 4-6
          g    | 7-9
          .    |  .
          .    |  .
          .    |  .
          .    |  .

      puh... hoffentlich versteht das jetzt wer... :-)

      Lässt sich soein Bezug überhaut herstellen?
      klar ... denn mächtig ist die Datenbak ;)

      Danke, der Hilker

      1. echo $begrüßung;

        Ich möchte Werte zusammenfassen die im Bereich +-10 liegen....
        puh... hoffentlich versteht das jetzt wer... :-)

        Wie genau ist denn "Bereich +-10" definiert und von welchem Bezugspunkt gehst du aus?
        Meinst du alle Zeilen in denen deren Wert größer oder gleich Bezugswert-10 und kleiner oder gleich Bezugswert+10 ist?

        echo "$verabschiedung $name";

        1. echo $begrüßung;

          Ich möchte Werte zusammenfassen die im Bereich +-10 liegen....
          puh... hoffentlich versteht das jetzt wer... :-)

          Wie genau ist denn "Bereich +-10" definiert und von welchem Bezugspunkt gehst du aus?

          das ist ja mein Dielemma, ich hab keinen bezugswert. :-(

          Meinst du alle Zeilen in denen deren Wert größer oder gleich Bezugswert-10 und kleiner oder gleich Bezugswert+10 ist?

          echo "$verabschiedung $name";

          der Hilker

      2. puh... hoffentlich versteht das jetzt wer... :-)

        nöö, nicht wirklich. Was ist denn die tatsächliche Anwendung?

        Es sieht so aus, als ob du einen Wert suchen willst und die Antwort soll sein: "auf Seite 3"

        Lexikon-Inhaltsverzeichnis:

        buchst. | Seite
        ---------+---------
            a    | 1
            b    | 1
            c    | 1
            d    | 2
            e    | 2
            f    | 2
            g    | 3
            .    |  .

        ist es das?

        1. puh... hoffentlich versteht das jetzt wer... :-)

          nöö, nicht wirklich. Was ist denn die tatsächliche Anwendung?

          geokoordinaten zusammenfassen, die nahe beieinanderliegen.
          Also: Fasse alle daten unter einem (beliebigen) Schlüssel zusammen, wenn sie nicht weiter als 5km voneinander entfernt sind.

          ich hab auch schon im FreeGIS teil von mySQL geschmökert, da aber auch nichts passendes gefunden...

          Es sieht so aus, als ob du einen Wert suchen willst und die Antwort soll sein: "auf Seite 3"

          Lexikon-Inhaltsverzeichnis:

          buchst. | Seite
          ---------+---------
              a    | 1
              b    | 1
              c    | 1
              d    | 2
              e    | 2
              f    | 2
              g    | 3
              .    |  .

          ist es das?

          auch nicht wirklich... ;-/

          1. echo $begrüßung;

            Was ist denn die tatsächliche Anwendung?
            geokoordinaten zusammenfassen, die nahe beieinanderliegen.
            Also: Fasse alle daten unter einem (beliebigen) Schlüssel zusammen, wenn sie nicht weiter als 5km voneinander entfernt sind.

            Du hast n Datensätze in Tabelle x und willst zu jedem dieser Datensatz die Datensätze, die nicht weiter als 5 Kilometer entfernt liegen? Wenn es das ist, dann, so denke ich, brauchst du einen Self-Join und den erklären dir dann die Datenbankexperten ...

            echo "$verabschiedung $name";

            1. echo $begrüßung;

              Was ist denn die tatsächliche Anwendung?
              geokoordinaten zusammenfassen, die nahe beieinanderliegen.
              Also: Fasse alle daten unter einem (beliebigen) Schlüssel zusammen, wenn sie nicht weiter als 5km voneinander entfernt sind.

              Du hast n Datensätze in Tabelle x und willst zu jedem dieser Datensatz die Datensätze, die nicht weiter als 5 Kilometer entfernt liegen? Wenn es das ist, dann, so denke ich, brauchst du einen Self-Join und den erklären dir dann die Datenbankexperten ...

              *lol* Naja, das ist ja immerhin schonmal ein Hinweis :)
              zudem ist es nur FAST richtig, ich möchte nicht zu jedem alle 5km entfernten, sondern nur die die noch nicht einem anderen zugeordnet sind... aber das müßte sich dann ja mit einem geschickten GROUP BY realisieren lassen...

              echo "$verabschiedung $name";

              Danke soweit!

          2. geokoordinaten zusammenfassen, die nahe beieinanderliegen.

            Ach so, Umkreissuche habe ich schon gemacht. Du gehst von einen Ort aus:
            z.B. Birkenau/Odw. nord = 49.5670;  ost = 8.7170;

            Wenn nun 5 km 0.05 Grad entsprechen (habe ich jetzt nicht im Kopf), dann kannst du alle Orte in einem Quadrat mit der Kantenlänge 10 km finden, in dem Birkenau mittig liegt:

            $links  = row['ost']  -0.05;
            $rechts = row['ost']  +0.05;
            $oben   = row['nord'] +0.05;
            $unten  = row['nord'] -0.05;

            SELECT * FROM orte WHERE nord <= $oben AND  nord >= $unten AND ost <= $rechts AND ost >= $links

            Bitte auf Denkfehler überprüfen, bin nach einem langen Arbeitstag nicht mehr taufrisch.

            Ist es das, was du meinst?

            Oder willst du eine Landkarte in Quadrate aufteilen und allen Orten eines Quadrates denselben Suchbegriff geben?

            Kalle

            1. geokoordinaten zusammenfassen, die nahe beieinanderliegen.

              Ach so, Umkreissuche habe ich schon gemacht. Du gehst von einen Ort aus:
              z.B. Birkenau/Odw. nord = 49.5670;  ost = 8.7170;

              Wenn nun 5 km 0.05 Grad entsprechen (habe ich jetzt nicht im Kopf), dann kannst du alle Orte in einem Quadrat mit der Kantenlänge

              0.083333 entsprechen ca. 1km :-)
              10 km finden, in dem Birkenau mittig liegt:

              $links  = row['ost']  -0.05;
              $rechts = row['ost']  +0.05;
              $oben   = row['nord'] +0.05;
              $unten  = row['nord'] -0.05;

              SELECT * FROM orte WHERE nord <= $oben AND  nord >= $unten AND ost <= $rechts AND ost >= $links

              das ist mir schon klar, nur habe ich in meinem Fall keinen Bezugspunkt, und möchte ALLE orte aus der Basis haben die eine gewisse nähe zueinander aufweisen...

              Bitte auf Denkfehler überprüfen, bin nach einem langen Arbeitstag nicht mehr taufrisch.

              Ist es das, was du meinst?

              Oder willst du eine Landkarte in Quadrate aufteilen und allen Orten eines Quadrates denselben Suchbegriff geben?

              Das ganze stellt sich wie folgt dar:
              Ich "male" an bestimmten Koordinaten kreuzchen in eine Karte, und an stellen wo viele kreuze sind, findet man dann nur noch schwer durch und man kann schlecht navigieren, daher würde ich solche "Ballungspunkte" gerne zu einem großen zusammenfassen.

              Ein Beispiel ist hier zu sehen.

              Kalle

              der Hilker

              1. jetzt habe ich mir so viel Mühe gegeben und war doch am Thema vorbei.

                Das ganze stellt sich wie folgt dar:
                Ich "male" an bestimmten Koordinaten kreuzchen in eine Karte, und an stellen wo viele kreuze sind, findet man dann nur noch schwer durch und man kann schlecht navigieren, daher würde ich solche "Ballungspunkte" gerne zu einem großen zusammenfassen.

                Ein Beispiel ist hier zu sehen.

                ich sehe einige Kreise, die sich überlappen. Es soll also keine Überlappung geben? Vor einer Antwort muss ich erstmal dein Problem richtig verstehen.

                Kalle

                1. jetzt habe ich mir so viel Mühe gegeben und war doch am Thema vorbei.

                  Das ganze stellt sich wie folgt dar:
                  Ich "male" an bestimmten Koordinaten kreuzchen in eine Karte, und an stellen wo viele kreuze sind, findet man dann nur noch schwer durch und man kann schlecht navigieren, daher würde ich solche "Ballungspunkte" gerne zu einem großen zusammenfassen.

                  Ein Beispiel ist hier zu sehen.

                  ich sehe einige Kreise, die sich überlappen. Es soll also keine Überlappung geben? Vor einer Antwort muss ich erstmal dein Problem richtig verstehen.

                  Genau, kreise die sich überlappen sollen zusammengefasst werden...

                  Kalle

                  1. Genau, kreise die sich überlappen sollen zusammengefasst werden...

                    Dann bekommst du folgendes Problem: Es könnten sich ja Kreise von München bis Flensburg überlappen (kenne die Anwendung nicht, um was geht es? Mobilfunkmasten?)

                    Dann willst du also in der Mitte dieser Strecke einen kleinen Kreis?

                    1. Genau, kreise die sich überlappen sollen zusammengefasst werden...

                      Dann bekommst du folgendes Problem: Es könnten sich ja Kreise von München bis Flensburg überlappen

                      das würde nichts ausmachen, dann kann man ja trotzdem stellenweise welche zusammenfassen und so ist wieder Luft... die kette reißt somit ab...

                      (kenne die Anwendung nicht, um was geht es? Mobilfunkmasten?)
                      einfach nur eine grafische Anzeige wo sich welcher user befindet. rechts im eingabefeld kann man sich halt eintragen....

                      Dann willst du also in der Mitte dieser Strecke einen kleinen Kreis?

                      ich möchte nur, dass man an den stellen wo "viel los" ist, besser navigieren kann... ob ich dafür nun kreise zusammenfasse oder es irgendwie anders löse ist mir eigentlich gleich...

                      Gruß, der Hilker

                      1. ich möchte nur, dass man an den stellen wo "viel los" ist, besser navigieren kann... ob ich dafür nun kreise zusammenfasse oder es irgendwie anders löse ist mir eigentlich gleich...

                        Dann lege doch in Gedanken Karopapier auf die Landkarte, jedes Karo hat einen eindeutigen Namen, so wie die Quadrate im Stadtplan. Es sind natürlich wesentlich mehr Quadrate als im Stadtplan.

                        Du teils die BRD auf z.B. in 200 Quadrate neben- und 600 untereinander. Dann ist das linksobere "000_000" und das rechtsuntere "199_599".

                        Jetzt kannst du JEDEN Ort bei der Eingabe einem der Quadrate zuordnen:
                        020_360, 020_360, 025_010, 050_438, ...
                        Beim Setzen der Kreise holst du jedes belegte Quadrat EINMAL aus der Datenbank und setzt einen Kreis auf die Landkarte.

                        Ist das die Lösung?

                        1. Du teils die BRD auf z.B. in 200 Quadrate neben- und 600 untereinander. Dann ist das linksobere "000_000" und das rechtsuntere "199_599".

                          Jetzt kannst du JEDEN Ort bei der Eingabe einem der Quadrate zuordnen:
                          020_360, 020_360, 025_010, 050_438, ...
                          Beim Setzen der Kreise holst du jedes belegte Quadrat EINMAL aus der Datenbank und setzt einen Kreis auf die Landkarte.

                          Ist das die Lösung?

                          Mhh... müßte mir mal überlgen wie der Aufwand ist,
                          Ich hab mich grade mit dem o.G. self join befasst und in einer testtabelle mit nummern und buchstaben diese klausel angewand:

                          SELECT test.num, altertest.num
                          FROM test
                          JOIN test AS altertest ON test.num
                          BETWEEN altertest.num
                          AND altertest.num +2
                          GROUP BY test.val

                          sie bewirkt genau das, was ich möchte, NUR: was mache ich jetzt mit dem anderen JOIN, der sowieso schon in der bisherigen Abfrage ist?!

                          *grübel*

                          SELECT id, name, nachname, user.plz, user.ort, geodata.lg, geodata.bg
                          FROM user
                          JOIN geodata ON geodata.plz = user.plz
                          AND geodata.staat = user.country
                          GROUP BY user.id
                          ORDER BY geodata.lg, geodata.bg, plz ASC

                          Also, das bekomm ich beim besten Willen nicht portiert...

                          Naja - egal... ist wohl Zeit für's Bett :)

                          Gruß und Danke!

                          DerHilker

              2. Moin!

                Wenn nun 5 km 0.05 Grad entsprechen (habe ich jetzt nicht im Kopf), dann kannst du alle Orte in einem Quadrat mit der Kantenlänge
                0.083333 entsprechen ca. 1km :-)

                Diese Antworten sind beide falsch. :)

                Es besteht ein Unterschied, ob man Breitengrad oder Längengrad vor sich hat.

                Die Breitengrade sind äquidistant, die Längengrade laufen zu den Polen hin immer dichter zusammen und haben nur am Äquator den gleichen Abstand, wie die Breitengrade.

                Es gilt: Eine Bogenminute auf dem Breitengrad entspricht genau einer Seemeile oder 1852 Metern, eine Bogenminute auf dem Längengrad ist um cos(Breitengrad) kürzer).

                - Sven Rautenberg

                --
                My sssignature, my preciousssss!
                1. Hello,

                  Es besteht ein Unterschied, ob man Breitengrad oder Längengrad vor sich hat.

                  Die Breitengrade sind äquidistant, die Längengrade laufen zu den Polen hin immer dichter zusammen und haben nur am Äquator den gleichen Abstand, wie die Breitengrade.

                  In Ermangelung eines Globus kann ich nicht einfach gucken gehen.
                  Kannst Du "äquidistant" nochmal genauer erläutern?

                  Ist der Abstand der Breitengrade auf einer idealisierten Kugeloberfläche gleich, oder sind die durch die Breitengread gebildeten Ebenen gleichweit voneinander entfernt?

                  Gibt es eigentlich ein absolutes XYZ-Geosystem, in dem jeder Punkt der Erde (Erdoberfläche) eine absolute Position hat?

                  Harzliche Grüße vom Berg
                  http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau

                  1. Moin!

                    Die Breitengrade sind äquidistant, die Längengrade laufen zu den Polen hin immer dichter zusammen und haben nur am Äquator den gleichen Abstand, wie die Breitengrade.

                    In Ermangelung eines Globus kann ich nicht einfach gucken gehen.
                    Kannst Du "äquidistant" nochmal genauer erläutern?

                    "äquidistant" = Die Entfernung zwischen zwei Breitengraden auf der Kugeloberfläche ist überall auf der Welt gleich.

                    Gibt es eigentlich ein absolutes XYZ-Geosystem, in dem jeder Punkt der Erde (Erdoberfläche) eine absolute Position hat?

                    Das gibt es, und man benutzt es schon sehr lange: Kugelkoordinaten in Form von Längen- und Breitenangabe.

                    Drüber hinaus kann man auch jedes andere Koordinatensystem nehmen, z.B. Zylinderkoordinaten oder kartesische Koordinaten. Diese Systeme sind jeweils ineinander transformierbar - es ist aber schlau, sich jeweils ein der Problemstellung angemessenes Koordinatensystem zu wählen.

                    - Sven Rautenberg

                    --
                    My sssignature, my preciousssss!
                    1. Hello,

                      Das gibt es, und man benutzt es schon sehr lange: Kugelkoordinaten in Form von Längen- und Breitenangabe.

                      Kugelkoordinaten sind ja nicht real, sondern idealisiert.
                      Hier würde man mindestens drei Angaben benötigen...
                      Das suchte ich eigentlich, also wie Du schon sagtest, z.B. ein karthesisches System. Nur man müsste dann eben wissen, wo die Achsen festgelegt wurden. Ich konnte da bisher nichts finden.

                      Harzliche Grüße vom Berg
                      http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau

                      1. Hi,

                        Kugelkoordinaten sind ja nicht real, sondern idealisiert.
                        Hier würde man mindestens drei Angaben benötigen...
                        Das suchte ich eigentlich, also wie Du schon sagtest, z.B. ein karthesisches System. Nur man müsste dann eben wissen, wo die Achsen festgelegt wurden. Ich konnte da bisher nichts finden.

                        Das ganze is ne Wissenschaft für sich.
                        Die verschiedenen Angaben für Längen- und Breitengrad eines Punktes auf der Erdoberfläche beziehen sich auf versch. Ellipsoide, die zugrunde gelegt werden.
                        Stichwort: "Kartendatum"
                        Bei topografischen Karten in D wird üblicherweise das Potsdam-Datum verwendet.
                        Neuere GPS-Geräte sind meist auf WGS 84 voreingestellt.
                        Um einen Punkt auf der Erdoberfläche wiederzufinden, benötigst du also zusätzlich zur Angabe der Koordinaten auch noch das Kartendatum.

                        Als Koordinatensystem mit entsprechender Projektion ist in D Gauß-Krüger gebräuchlich. Geht streifenweise in 3°-Schritten, wobei die Position eines Punktes als Abstand zum entspr. Mittelmeridian/Äquator angegeben wird.

                        Da man eine Kugel nicht verzerrungsfrei auf eine ebene Fläche abbilden kann, gibts jede Menge versch. Projektionsverfahren:

                        z.B Kegel-, Zylinder-, Schnittkegel-, Schnittzylinder-, und... und... und...

                        Um sich eingehend zu informieren, empfehle ich http://www.ottmarlabonde.de/

                        Viel Spaß !

                        gruß
                        ptr

  3. Hello Hilker,

    find ich interessant, was Du da macht. Darüber würde ich gerne etwas mehr wissen.
    Wie hast Du die Karte "eingemessen"?

    Nur so eine Idee: Javascript ist ja nun sowieso notwendig für Deine Lösung. Wie wäre es, wenn Du, nachdem Du eine Lösung für die Datenbankfrage gefunden hast, bei höherer Dichte eine Ausschnittvergrößerung aufpoppen lässt?

    Wie ist denn das Satzformat für die abgefragte Tabelle?

    Soviel ich weiß, gibt es zur Geo-DB auch ein paar Tools für eine Umkreissuche im Netz. Ich habe sie aber eben leider nicht gefunden :-(

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hello,

      auf jeden Fall passt das schon mal zum Thema:
      http://de.wikipedia.org/wiki/Häufungspunkt

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. Hello,

        http://de.wikipedia.org/wiki/Häufungspunkt
        hat mich auf den Lösungsansatz gebracht:

        "Definition: Sei a Element eines topologischen Raumes X und sei M eine Teilmenge von X. Man sagt a ist Häufungspunkt von M, wenn in jeder Umgebung von a ein Punkt von M liegt, der von a verschieden ist."

        Erweitere Dein Tabellenformat um die Spalte "Umgebungs_Anzahl"
        Bestimme die Größe der gewünschten Umgebung
        Nimm die Koordinaten des Punktes und zähle in der DB alle Datensätze, die in dieser Umgebung liegen.

        Select count() as ANZAHL
           from TABELLE
           where (X between $xs-$umgebung and $xs+$umgebung) and
                 (Y between $ys-$umgebung and $ys+$umbegung);

        Das Ergebnis trägst Du dann für den Satz ein.

        Die Rechnung musst Du für jeden Satz durchführen. Das ergibt dann die Charts
           über Umgebungs_Anzahl. Da musst Du nur noch einen Schwellwert festlegen, ab welcher
           Umgebungs_Anzahl Du zusammfasst.

        Das ist jetzt bitte nur ein Rohentwurf.
        Wahrscheinlich kann man bei neueren MySQL-Versionen (oder was war im Einsatz?) auch ein Update mit Subselect machen. Dann brauchst Du kein Script drum herum zu bauen ;-)

        Würde mich freuen, wenn Du die Lösung hier später veröffentlichen würdest.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hello,

          http://de.wikipedia.org/wiki/Häufungspunkt
          hat mich auf den Lösungsansatz gebracht:

          "Definition: Sei a Element eines topologischen Raumes X und sei M eine Teilmenge von X. Man sagt a ist Häufungspunkt von M, wenn in jeder Umgebung von a ein Punkt von M liegt, der von a verschieden ist."

          Erweitere Dein Tabellenformat um die Spalte "Umgebungs_Anzahl"
          Bestimme die Größe der gewünschten Umgebung
          Nimm die Koordinaten des Punktes und zähle in der DB alle Datensätze, die in dieser Umgebung liegen.

          Select count() as ANZAHL
             from TABELLE
             where (X between $xs-$umgebung and $xs+$umgebung) and
                   (Y between $ys-$umgebung and $ys+$umbegung);

          OK, sowas in der Art habe ich mir schon ausgedacht.
          Ich habe versucht mittels SubQuery die Ergebnismasse nochmals zu JOINen, was allerdings fehl schlug. Das Query dazu sah dann wie folgt aus:

          SELECT *
          FROM (
          SELECT id, name, nachname, user.plz, user.ort, geodata.lg, geodata.bg
          FROM user
          JOIN geodata ON geodata.plz = user.plz
          AND geodata.staat = user.country
          GROUP BY user.id
          ORDER BY geodata.lg, geodata.bg, plz ASC
          ) AS temptable
          JOIN temptable        ###<--- an der Stelle terminiert es geodata.temptable not exists.
          AS altertable ON (temptable.bg
          BETWEEN altertable.bg
          AND altertable.bg +2)
          AND (temp_table.lg
          BETWEEN altertable.lg
          AND altertable.lg +2)
          GROUP BY temp_table.id

          und war /ist rattenlangsam

          Das Ergebnis trägst Du dann für den Satz ein.

          Die Rechnung musst Du für jeden Satz durchführen. Das ergibt dann die Charts
             über Umgebungs_Anzahl. Da musst Du nur noch einen Schwellwert festlegen, ab welcher
             Umgebungs_Anzahl Du zusammfasst.

          meine nächste Idee ist jetzt ein VIEW zu machen, und auf den dann das 2. Join, da ich aber bisher nicht mit VIEWs gearbeitet habe, weiß ich nicht wie resistent die Daten sind, und was passiert wenn dann z.b. zwei anfragen zeitgleich/nah gemachtwerden. wird dann ein 2.VIEWtable angelegt, oder der "alte" überschrieben?

          Das ist jetzt bitte nur ein Rohentwurf.
          Wahrscheinlich kann man bei neueren MySQL-Versionen (oder was war im Einsatz?) auch ein Update mit Subselect machen. Dann brauchst Du kein Script drum herum zu bauen ;-)

          ich benutze momentan die aktuelle MySQL version (vor ein paar Tagen erst das Update gemacht)

          Würde mich freuen, wenn Du die Lösung hier später veröffentlichen würdest.

          ja, und ich würde mich freuen wenn ich eine "vernünftige" und fixe Lösung finden könnte/ würde :)

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          1. Hello,

            Würde mich freuen, wenn Du die Lösung hier später veröffentlichen würdest.
            ja, und ich würde mich freuen wenn ich eine "vernünftige" und fixe Lösung finden könnte/ würde :)

            Ich werfe jetzt einfach mal ein: Du willst zuviel auf einmal!
            Probier es doch erst mal in kleinen Schritten aus.
            Und diese Berechnung bei jedem Seitenaufruf in Time durchzuführen, wir mMn Dein DBMS zum Absturz führen...

            Erster Schritt sollte sein, mal die DBMS-Version zu nennen. Dann kann man vielelicht mittels Handbuch und Testinstallationen sehen, was zum Ziel führt und was eher Killer-Eigenschaften für die DB hat.

            Und dann solltest Du uns eine Tabelle (als Dump oder CSV) zum Download bereitstellen, damit wir nicht selber Testdaten eintippen müssen. Was hältst Du davon?

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Hello,

              Würde mich freuen, wenn Du die Lösung hier später veröffentlichen würdest.
              ja, und ich würde mich freuen wenn ich eine "vernünftige" und fixe Lösung finden könnte/ würde :)

              Ich werfe jetzt einfach mal ein: Du willst zuviel auf einmal!
              Probier es doch erst mal in kleinen Schritten aus.
              Und diese Berechnung bei jedem Seitenaufruf in Time durchzuführen, wir mMn Dein DBMS zum Absturz führen...

              OK, bei den paar daten im Moment hab ich noch keine angst :)
              Warum das o.g. Query so langsam war, hab ich auch herausgefunden, hatte versehentlich die plz in eine "TEXT" spalte geschrieben.

              Erster Schritt sollte sein, mal die DBMS-Version zu nennen. Dann kann man vielelicht mittels Handbuch und Testinstallationen sehen, was zum Ziel führt und was eher Killer-Eigenschaften für die DB hat.

              Ich benutze MySQL 5.0.18-nt unter Win2000.

              Und dann solltest Du uns eine Tabelle (als Dump oder CSV) zum Download bereitstellen, damit wir nicht selber Testdaten eintippen müssen. Was hältst Du davon?

              Ein Datenbank-Dump habe ich nach http://hilker.no-ip.org/ghostbuster/daten/datadump.sql.zip kopiert.

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

              der Hilker

        2. Achso, nochwas:

          ich hab in einer Testtabelle mal einfach folgendes gemacht:

          SELECT test.val, altertest.x, altertest.y
           FROM test
           JOIN test AS altertest ON (test.x
           BETWEEN altertest.x
           AND altertest.x +2)
           AND (test.y BETWEEN altertest.y AND altertest.y +2)
           GROUP BY test.val;

          URSPRUNGSTABELLE         ERGEBNISMASSE
          +-----+-----+-----+   +-----+-----+-----+
          | x   | y   | val |   | val | x   | y   |
          +-----+-----+-----+   +-----+-----+-----+
          |   0 | 130 | A   |   | A   |   0 | 130 |
          |  10 | 125 | B   |   | B   |  10 | 125 |
          |  20 | 120 | C   |   | C   |  20 | 120 |
          |  30 | 115 | D   |   | D   |  30 | 115 |
          |  40 | 110 | E   |   | E   |  40 | 110 |
          |  50 | 105 | F   |   | F   |  50 | 105 |
          |  60 | 100 | G   |   | G   |  60 | 100 |
          |  70 |  95 | H   |   | H   |  70 |  95 |
          |  80 |  90 | I   |   | I   |  80 |  90 |
          |  90 |  85 | J   |   | J   |  90 |  85 |
          | 100 |  80 | K   |   | K   | 100 |  80 |
          | 119 |  69 | L   |   | L   | 119 |  69 |
          | 120 |  70 | M   |   | M   | 119 |  69 |
          | 121 |  71 | N   |   | N   | 119 |  69 |
          | 122 |  90 | O   |   | O   | 122 |  90 |
          | 150 |  55 | P   | | P   | 150 |  55 |
          | 160 |  50 | Q   | | Q   | 160 |  50 |
          | 170 |  45 | R   | | R   | 170 |  45 |
          | 180 |  40 | S   | | S   | 180 |  40 |
          | 190 |  35 | T   | | T   | 190 |  35 |
          | 200 |  30 | U   | | U   | 200 |  30 |
          | 210 |  25 | V   | | V   | 210 |  25 |
          | 220 |  20 | W   | | W   | 220 |  20 |
          | 230 |  15 | X   | | X   | 230 |  15 |
          | 240 |  10 | Y   | | Y   | 240 |  10 |
          | 250 |   5 | Z   | | Z   | 250 |   5 |
          +-----+-----+-----+ +-----+-----+-----+

          guckst du bei den manipulierten einträgen L,M und N ist zu sehen, dass das Ganze fein zusammengefasst wird.

          Gruß, der Hilker

          1. Hello,

            nur was nützt Dir das?
            Nun hast Du immer noch drei Punkte, die jetzt allerdings auf eine Koordinate fallen.
            Welchen der drei Orte willst Du denn dann anzeigen?

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Hello,

              nur was nützt Dir das?
              Nun hast Du immer noch drei Punkte, die jetzt allerdings auf eine Koordinate fallen.

              Ganz genau - diese 3 Punkte werden somit auch an der selben koordinate "zusammengefasst" angezeigt....

              Welchen der drei Orte willst Du denn dann anzeigen?

              Das passiert dann in dem Hint der aufgeht, wenn man mit der Maus drüber fährt... genau wie bei orten die mehrere PLZen haben...

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

              1. Hello,

                Welchen der drei Orte willst Du denn dann anzeigen?
                Das passiert dann in dem Hint der aufgeht, wenn man mit der Maus drüber fährt... genau wie bei orten die mehrere PLZen haben...

                Ich meinte, wie Du das in der Abfrage realisieren willst.
                Die drei müssen doch irgendwie konsolidiert werden.
                Da wird doch ohnehin noch ein Zwischenschritt notwendig werden, oder?

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau

                1. Hello,

                  Welchen der drei Orte willst Du denn dann anzeigen?
                  Das passiert dann in dem Hint der aufgeht, wenn man mit der Maus drüber fährt... genau wie bei orten die mehrere PLZen haben...

                  Ich meinte, wie Du das in der Abfrage realisieren willst.
                  Die drei müssen doch irgendwie konsolidiert werden.
                  Da wird doch ohnehin noch ein Zwischenschritt notwendig werden, oder?

                  Das tue ich ja im Moment auch schon, wenn wie gesagt mehrere menschen im selben ort unter anderer PLZ eingetragen sind, das übernimmt die Logik, die die HTML Seite erstellt wenn sie das result auswertet

                  Tom

                  der Hilker

          2. Hello,

            SELECT test.val, altertest.x, altertest.y
            FROM test
            JOIN test AS altertest ON (test.x
            BETWEEN altertest.x
            AND altertest.x +2)
            AND (test.y BETWEEN altertest.y AND altertest.y +2)
            GROUP BY test.val;

            Diese Abfrage hilft Dir aber nur scheinbar.
            Bau mal ein paar Orte _unsortiert_ dazwischen, die außerdem noch in anderen Quadranten liegen.

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Hello,

              SELECT test.val, altertest.x, altertest.y
              FROM test
              JOIN test AS altertest ON (test.x
              BETWEEN altertest.x
              AND altertest.x +2)
              AND (test.y BETWEEN altertest.y AND altertest.y +2)
              GROUP BY test.val;

              Diese Abfrage hilft Dir aber nur scheinbar.
              Bau mal ein paar Orte _unsortiert_ dazwischen, die außerdem noch in anderen Quadranten liegen.

              Für so etwas gibbets doch die ORDER BY Klausel

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

              der Hilker

              1. Hello,

                Für so etwas gibbets doch die ORDER BY Klausel

                Sortiert die auch zweidimensional mit Unschärfe? :-)

                Dein Problem ist, dass Du erst die Häufungspunkte benötigst, und diesen dann die Orte im Radius zuordenen musst. Diese müssen aber dabei aus der Menge der verfügbaren Orte entfernt werden, damit sie im nächsten Schleifendurchlauf nicht aus Versehen selber als relatives Maximum angesehen werden.

                Bei einer überschaubaren Menge von z.B. 1000 Orten würde ich das nicht mit der Datenbank machen.

                Das Problem beschäftigt mich aber nun schon dn halben Samstag und es ist durchaus interessant, wie man das mit der DB lösen kann.

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau

    2. Hello Hilker,

      Moin Tom!

      find ich interessant, was Du da macht. Darüber würde ich gerne etwas mehr wissen.
      Wie hast Du die Karte "eingemessen"?

      Wie genau meinst Du das? Ich habe weiter unten im Forum schonmal einen Thread geöffnet, da haben die Forumuser Daten eingetragen und ggf. bemängelt, aufgrund der so ermittelten Daten habe ich den Algorythmus der für das "einmessen" zuständig ist, auf die karte angepasst.

      Nur so eine Idee: Javascript ist ja nun sowieso notwendig für Deine Lösung. Wie wäre es, wenn Du, nachdem Du eine Lösung für die Datenbankfrage gefunden hast, bei höherer Dichte eine Ausschnittvergrößerung aufpoppen lässt?

      Ja, die Idee hatte ich auch schon, ist nur auch nicht grade Rudimentär so eine Funktion!

      Wie ist denn das Satzformat für die abgefragte Tabelle?

      Es gibt 2 Tabellen die via JOIN eine Ergebnismasse liefern, das Query sieht wie folgt aus:

      SELECT id, name, nachname, user.plz, user.ort, geodata.lg, geodata.bg
      FROM user
      JOIN geodata ON geodata.plz = user.plz
      AND geodata.staat = user.country
      GROUP BY user.id
      ORDER BY geodata.lg, geodata.bg, plz ASC

      Soviel ich weiß, gibt es zur Geo-DB auch ein paar Tools für eine Umkreissuche im Netz. Ich habe sie aber eben leider nicht gefunden :-(

      Ja, das ging mir genauso :-/

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      der Hilker

    3. Hello,

      vielleicht hilft Dir dieses Statement auch nochmal weiter:

      select A.ORT, B.ORT, A.X, A.Y, B.X, B.Y, sqrt(pow((B.X-A.X),2)+pow((B.Y-A.Y),2)) as DIST
      from test as A, test as B
      where A.ORT <> B.ORT
      and B.X between A.X-10 and A.X+10
      and B.Y between A.Y-10 and A.Y+10
      #and DIST < 10                  # funktioniert bei MySQL 3.23.55 leider nicht. Hab keine andere
      order by DIST;

      Listet alle Ortspaarungen innerhalb einer Umgebung auf. (so ungefähr)

      Gilt natürlich nur innerhalb einer kurzen Distanz, da keine sphärische Berechnung berücksichtigt wurde...

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau