mysql Umkreissuche -> Abfrage für mehrere Punkte ohne Schleife

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysql Umkreissuche -> Abfrage für mehrere Punkte ohne Schleife

    Hallo,

    ich möchte für eine Umkreissuche Entfernungen im Voraus in einer Tabelle "umkreise" speichern. Dabei existieren bereits 2 Tabellen -> Tabelle "orte" enthält alle Ortschaften mit Geodaten und Tabelle "sehenswuerdigkeiten" alle Sehenswürdigkeiten mit Geodaten. In der Tabelle "umkreise" sollen für jedem Ort (Feld ort_id ist der eindeutige Index) die 20 nächstgelegenen Sehenswürdigkeiten hinterlegt werden (Feld swd_id ist der eindeutige Index) und dazu die Entfernung in km.

    Zur Zeit nutze ich folgende Abfrage, um für einen Ort die Entfernungen der 20 nächstgelegenen Sehenswürdigkeiten zu erhalten.

    Tabellenaufbau:
    Tabelle "orte" mit den Feldern lat, lng (Geokoordinaten), ortsname, plz, ort_id (eindeutige ID)
    Tabelle "sehenswuerdigkeiten" mit den Feldern lat, lng (Geokoordinaten), name, swd_id (eindeutige ID)
    Tabelle "umkreise" mit den Feldern ort_id, swd_id, entfernung
    PHP-Code:
    USE geodaten;
    SET @lat1 50.756083, @lng1 6.105333#Beispielkoordinaten für einen Ort
    SELECT sehenswuerdigkeiten.swd_id 
    ROUND(6378.16 ACOS(((SIN(@lat1 57.2958) * SIN(sehenswuerdigkeiten.lat 57.2958)) 
    + ((
    COS(@lat1 57.2958) * COS(sehenswuerdigkeiten.lat 57.2958)) 
    COS((sehenswuerdigkeiten.lng 57.2958) - (@lng1 57.2958))))),2) AS `entf_km
    FROM sehenswuerdigkeiten
    ORDER BY entf_km asc
    LIMIT 20

    Dabei werden die Variablen @lat1, @lng1 mit Geodaten von einen entsprechenden Ort befüllt. Das funktioniert auch prima, nur bei vielen gleichzeitigen Anfragen an die Datenbank dauert dies zu lange. So kam die Idee, in einer Tabelle "umkreise" bereits im Vorfeld für jeden Ort alle 20 nächstgelegenen Sehenswürdigkeiten zu hinterlegen. Auch für das Erzeugen der Tabelle "umkreise" gibt es bereits eine Lösung, bei welcher mit java für jeden Ort in einer Schleife die Geodaten ermittelt werden, oben aufgeführte Abfrage ausgeführt wird und das Ergebnis dann in Tabelle "umkreise" gespeichert wird.

    Nun zu meinem Anliegen. Mich interessiert, ob die selbe Aufgabe auch ausschließlich in einer mysql-Abfrage (ohne Schleifenkonstrukte) - also ohne Zuhilfenahme einer weiteren Programmiersprache umsetzbar ist. Ich habe schon vieles probiert, doch leider ohne Erfolg. Leider sind meine SQL-Kenntnisse zu gering, um einschätzen zu können, ob eine Abfrage dieser Art simpel realisieren zu können. Wer kann mir hierzu Tipps geben? Geht das überhaupt. Die Abfrage müsste ja zusätzlich zu oben aufgeführter Abfrage alle Städte durchlaufen.

    Gruß vom janti

  • #2
    Auf Erstellen desselben Threads in mehreren Foren bitte verzichten.

    mysql Umkreissuche -> Abfrage für mehrere Punkte ohne Schleife - php.de

    Kommentar

    Lädt...
    X