Ankündigung

Einklappen
Keine Ankündigung bisher.

Subselect

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

  • Subselect

    Hallo, ich bräuchte bitte mal eure Hilfe.

    Ich habe Tabelle "plz_de" wo alle Postleitzahlen und Längen- sowie Breitenangaben aus Deutschland hinterlegt sind.
    In Tabelle "eintragen" habe ich eingetragene Events, auch hier sind u.a. die plz und Längen- sowie Breitenangaben hinterlegt.

    Hier zunächst meine Abfrage:
    ----------------------------
    Zum Verständnis:
    $lat = 50.106529;
    $lon = 8.662162;
    $umkreis = 20;
    -----------------------------
    SELECT * FROM eintragen WHERE plz IN (SELECT

    plz,

    (
    6371 * acos(
    cos(
    radians( '$lat' )
    ) * cos(
    radians( lat )
    ) * cos(
    radians( lon ) - radians( '$lon' )
    ) + sin(
    radians( '$lat' )
    ) * sin(
    radians( lat )
    )
    )
    ) AS distance

    FROM
    plz_de

    HAVING
    distance <= '$umkreis')
    ORDER BY datum ASC

    Ich errechne zunächst die Längen und Breitenangaben aus der vom Kunden eingegebenen Adresse.
    Nun möchte ich Alle Events anzeigen lassen, die sich in diesem Postleitzahlen-Umkreis befinden.

    Habt ihr eine Idee?


  • #2
    Ja, google mal nach KNN. Das ist eine indexbasierte Umkreissuche. Mit passenden Datenbanken funktioniert das super.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Die Herumhampelei mit Sinus und Cosinus ist unnötig.

      https://dev.mysql.com/doc/refman/5.7...istance-sphere

      Kommentar


      • #4
        Vielen dank. Ich schaue da mal. Aber nur zum Verständnis... wo läge denn der Fehler?

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen
          Die Herumhampelei mit Sinus und Cosinus ist unnötig.
          das sowieso
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Hat denn keiner eine Idee warum der oben geschrieben Code nicht funktioniert? Die Funktion distance sphere ist super. Aber ich möchte nicht nur blind einen Code kopieren, sondern es erlernen. Aus diesem Grund, wäre es super lieb, wenn mir jemand einen Tipp geben könnte.

            Kommentar


            • #7
              Dein SQL strotzt nur so von Fehlern. Da kann keiner helfen, denn das da oben ist für uns hier nicht reproduzierbar. Es sei denn, du erstellst ein SQL-Fiddle mit deiner DB-Struktur und einigen Testdaten.
              Oder lass dir das generierte SQL ausgeben und dann mit deinem DB-Admintool ausführen. Dann erhältst du deine Fehlermeldungen.
              PHP-Klassen auf github

              Kommentar


              • #8
                Zitat von rigidi Beitrag anzeigen
                Aber ich möchte nicht nur blind einen Code kopieren, sondern es erlernen.
                "having" nutzt Du falsch, es wird by aggregierten (>Group by) Mengen eingesetzt, im "Normalfall" verwendet man "where" um eine Bedingung anzugeben. > Doku zu Having und Where lesen
                Das Ergebnis Deiner Berechnung kannst Du in Having bzw. richtiger Where nicht direkt abfragen. Where kennt die Berechnungsergebnisse aus Select nicht.
                "Where .. in (Select " muss auf beiden Seiten die gleiche Mengenstruktur liefern. Du kannst als nicht ein(1!) Feld PLZ mit 2 Feldern aus dem folgenden Select vergleichen.

                Ich möchte Dich damit allerdings nicht davon abhalten, dem Vorschlag von jspit zu folgen.
                Ebensowenig möchte ich Dich abhalten, die Vorschläge der anderen zu berücksichtigen.

                Kommentar

                Lädt...
                X