Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit komplexer Datenbankabfrage

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem mit komplexer Datenbankabfrage

    Kurz zum Hintergrund:
    ich habe eine Datenbank mit 50 Einträgen. Jeder Eintrag stellt einen Tarif dar. Jeder Datensatz beinhaltet mehrere Preise pro Minute für verschiedene Nutzungsarten. Der Nutzer kann in ein Formular auf der Homepage eingeben, wieviele Minuten er gedenkt zu nutzen und das System soll den für Ihn günstigsten Tarif ausspucken. Bzw. die Liste danach sortieren. Der eigentliche Knackpunkt an der Sache ist, dass es Tarife mit Inklusivminuten gibt. Die müssen auch beachtet werden.
    ich habe jetzt folgende Abfrage konstruiert:
    $sql = "SELECT * FROM tarifliste ORDER BY (FNHZ*$HZFN+FNNZ*$NZFN+FNWE*$WEFN+NIHZ*$HZintern+N INZ*$NZintern+EXHZ*$HZextern+EXNZ*$NZextern+EXWE*$ WEextern+SMS*$SMS+Grundgebuehr+Mindestumsatz+(if(I nklusivminuten>$minuten,$minuten-Inklusivminuten,Inklusivminuten-$minuten))*(if(Inklusivminuten>0,FNNZ,0)))";
    Für die Tarife ohne Inklusivminuten stimmt die Rechnung, logisch weil hinten ja mit 0 multipliziert wird. Aber bei den Tarifen mit Inklusivminuten stimmt gar nix. Außerdem sortiert er sehr seltsam, er setzt alle Tarife mit Inklusivminuten ans Ende unabhängig davon ob sie billig sind oder nicht.
    Das heißt also die Liste ist durcheinander, wobei er alle Tarife ohne Inklusivminuten an den Anfang setzt und auch richtig sortiert.

    Hat jemand eine Idee?

  • #2
    Teste doch mal folgende Abfrage:
    Code:
    $sql = "
    SELECT
       FNNZ,
       Inklusivminuten,
       (if(Inklusivminuten>$minuten,$minuten-Inklusivminuten,Inklusivminuten-$minuten)),
       (if(Inklusivminuten>0,FNNZ,0))
    FROM tarifliste";
    ... Vielleicht wird dann ein Fehler erkennbar.

    ~dilemma~

    Und Frage:
    Wie ist die Default-Definition für `Inklusivminuten` ? (NOT NULL, 0, NULL) ???

    Kommentar


    • #3
      Um zu sehen,
      ob diese riesige ORDER-Formel korrekt ist,
      kannst du diese komplett und in Teilen
      in den SELECT-Teil der Abfrage nehmen.
      zB so:
      Code:
      $sql = "
      SELECT *,
         (FNHZ*$HZFN+FNNZ*$NZFN+FNWE*$WEFN+NIHZ*$HZintern+NINZ*$NZintern+EXHZ*$HZextern+EXNZ*$NZextern+EXWE*$WEextern+SMS*$SMS+Grundgebuehr+Mindestumsatz) AS teil1,
         (if(Inklusivminuten>$minuten,$minuten-Inklusivminuten,Inklusivminuten-$minuten)) AS teil2,
         (if(Inklusivminuten>0,FNNZ,0)) AS teil3,
         (FNHZ*$HZFN+FNNZ*$NZFN+FNWE*$WEFN+NIHZ*$HZintern+NINZ*$NZintern+EXHZ*$HZextern+EXNZ*$NZextern+EXWE*$WEextern+SMS*$SMS+Grundgebuehr+Mindestumsatz+(if(Inklusivminuten>$minuten,$minuten-Inklusivminuten,Inklusivminuten-$minuten))*(if(Inklusivminuten>0,FNNZ,0))) AS sortierung
      FROM
         tarifliste
      ORDER BY
         sortierung ";
      Vielleicht wird dann nachvollziehbarer, was diese Formel berechnet.

      ~dilemma~

      Kommentar


      • #4
        Hi,

        erstma danke für die Antwort! Ich werde das morgen mal ausprobieren...gleich morgen früh
        Inklusivminuten ist Standardmässig NOT NULL

        grüße
        greg

        Kommentar

        Lädt...
        X