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

  • Gast-Avatar
    Ein Gast erstellte das Thema [Erledigt] Problem mit komplexer Datenbankabfrage.

    [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?

  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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~

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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) ???

    Einen Kommentar schreiben:

Lädt...
X