Ankündigung

Einklappen
Keine Ankündigung bisher.

Sortierproblem bei Datenbankabfrage

Einklappen

Neue Werbung 2019

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

  • Sortierproblem bei Datenbankabfrage

    Ich habe eine Tabelle mit Mitarbeitern, welche über ganz Deutschland verteilt sind und in zwei Datenbankfeldern die jeweiligen Koordinaten Ihres Standortes haben. Per Datenbankabfrage mit st_distance_sphere ermittle ich beispielsweise die 10 geografisch nächstgelegenen Mitarbeiter rund um Stuttgart. Diese möchte ich aber sortiert nach Stundensatz und eben nicht sortiert nach Entfernung von Stuttgart ausgeben. Führe ich aber die Datenbankabfrage mittels
    Code:
    ORDER BY distance, stundensatz
    aus erhalte ich die falsche Sortierung, nämlich sortiert nach Entfernung und nur bei identischer Entfernung sortiert nach Stundensatz. Hat jemand eine Idee wie ich hier die gewünschte Sortierung nur per Datenbankabfrage ohne PHP erzeugen kann?

  • #2
    Naja, die Datenbank tut das, was du ihr sagst:

    ORDER BY spalte1, spalte2 => sortiere nach spalte1 und danach nach spalte2

    Kommentar


    • #3
      Das möchte ich ja aber nicht. Ich möchte die 10 nächsten Mitarbeiter, also die 10 niedrigsten Werte der per st_distance_sphere ermittelten temporären Spalte distance, sortiert nach Stundensatz.

      Kommentar


      • #4
        Hier mal meine Abfrage, welche jetzt die 10 nächsten Mitarbeiter nach Entfernung sortiert:
        Code:
        SELECT  *, st_distance_sphere(point($lon,$lat) , point(longitude_new, latitude_new)) as dist FROM test_distance ORDER BY dist ASC LIMIT 0, 10
        Diese 10 nächsten Mitarbeiter möchte ich jedoch nach Stundensatz sortieren!

        Kommentar


        • #5
          Zitat von Overtone Beitrag anzeigen
          Hier mal meine Abfrage, welche jetzt die 10 nächsten Mitarbeiter nach Entfernung sortiert:
          Code:
          SELECT *, st_distance_sphere(point($lon,$lat) , point(longitude_new, latitude_new)) as dist FROM test_distance ORDER BY dist ASC LIMIT 0, 10
          Diese 10 nächsten Mitarbeiter möchte ich jedoch nach Stundensatz sortieren!
          wer oder was hindert Dich daran?
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Ich weiß nicht wie ich die Sortierung nach Stundensatz hin bekomme!

            Kommentar


            • #7
              Mit einem Sub-Select erst nach distanz sortieren und diese Ergebnis dann nach Stundensatz sortieren
              sorry, shift-taste kaputt

              Kommentar


              • #8
                Muss dieser Sub-Select in mein WHERE-Statement?
                Ergänzung: Klappt nicht, da im WHERE-Statement logischerweise 10 Datensätze im Sub-Select nicht funktionieren.

                Kommentar


                • #9
                  nein, in den from
                  sorry, shift-taste kaputt

                  Kommentar


                  • #10
                    Gerade probiert. Da habe ich auch das Problem "Unterabfrage lieferte mehr als einen Datensatz zurück":
                    Code:
                    SELECT *, (SELECT
                                                st_distance_sphere(point(0.013,22.646) , point(longitude_new, latitude_new)) as dist
                                            FROM
                                                test_distance
                                            ORDER BY dist ASC
                                            LIMIT 0, 10)
                                            FROM
                                              test_distance
                                            ORDER BY rate ASC

                    Kommentar


                    • #11
                      Ich sehe gerade du schreibst "in den from". Das kenne ich gar nicht. Wird in den from nicht nur die Datenbanktabelle deklariert?

                      Kommentar


                      • #12
                        Code:
                        select * from (
                           SELECT *, st_distance_sphere(point($lon,$lat) , point(longitude_new, latitude_new)) as dist FROM test_distance ORDER BY dist ASC LIMIT 0, 10
                        ) as sub
                        order by ...
                        sorry, shift-taste kaputt

                        Kommentar


                        • #13
                          Wow, das funktioniert einwandfrei. Vielen Dank für deine super Unterstützung!

                          Kommentar

                          Lädt...
                          X