Ankündigung

Einklappen
Keine Ankündigung bisher.

Minimum aus Datensätzen extrahieren

Einklappen

Neue Werbung 2019

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

  • Minimum aus Datensätzen extrahieren

    Guten Tag allerseits,

    ich stehe hier vor einem ziemlich (zumindest für mich) schwerwiegenden php-Problem.
    Erstmal folgendes Szenario zur Veranschaulichung.
    Ich habe Ein SQL-DB mit mehreren Artikeln und Preisen pro Minute dazu.
    Grundsätzlich möchte ich berechnen welcher Artikel für den User am billigsten ist, je nach dem wieviele Minuten er die Artikel nutzt. Die Artikel unterscheiden sich also in den Minutenpreisen und in der Grundgebühr.
    Der User kann schätzen wieviele Minuten er verbrauchen wird und auf Basis dessen soll der günstigste Artikel ausgegeben werden.
    So weit so gut. Die Datenbankabfrage ist kein Problem, das Problem ist, wie ich die Preise vergleiche, denn die letzendlichen Minutenpreise stehen ja nicht in der Datenbank, sondern werden erst im php-skript auf Basis der Usereingabe berechnet.
    Quasi müsste ich für jeden Artikel eine Preisberechnung durchführen und diese dann irgendwo speichern, bis alle Artikel berechnet sind. Danach dann die Preise der Artikel vergleichen, um dann den günstigsten herauszubekommen.

    Ich habe schon mit while() und foreach() Schleifen rumprobiert, aber das wird alles nix.
    Die einzige Option, die mir noch einfällt ist, für jeden Artikel der Datenbank die Berechnung durchzuführen und in einer anderen Variable zu speichern. Aber das bläht das Skript riesig auf, es müsste doch auch irgendwie einfacher gehen?!?
    Irgendwelche Ideen?

  • #2
    Versuchs mal mit:
    SELECT Anbieter, (minutenpreis*$minuten+grundgebuhr) AS Preis FROM tabelle ORDER BY (minutenpreis*$minuten+grundgebuhr)
    [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

    Kommentar


    • #3
      wow ich bin ja gebeistert! Obwohl ich einige mehr Konditionen hab, da zu verschiedenen Preisen verschiedene Zeiten gelten klappt das trotzdem.

      Vielen Dank!

      Kommentar


      • #4
        zu früh gefreut

        hm...schade leider klappt es nicht so ganz, weil ich folgendes nicht bedacht habe:
        Es gibt Angebote mit Inklusivminuten für die man einen Festpreis zahlt. Also zum Beispiel 50 Minuten für 25 Euro.
        Für die Angebote ohne Inklusivminuten berechnet das obige Beispiel alles richtig, aber soblad diese Angebote mit Inklusivminuten ins Spiel kommen geht alles schief. Denn: Ich muss irgendwie herausfinden, ob der User mit den Inklusivminuten besser fährt oder nicht, Das kann ich aber erst im php-Code unterhalb der SQL Abfrage, aber dann ist ja die Abfrage schon gelaufen und schon einsortiert, was bedeutet, dass das was ich da unten berechne erst in der nächsten Schleife wirksam wird. Und da kann ich es nicht brauchen.
        Die Abfragen werden praktisch mit Daten des vorhergien Datensatzes durchgeführt. Und dann stimmt natürlich die Rechnung nicht mehr.
        Irgendwelche Ideen???

        Kommentar


        • #5
          Die Inklusivminuten werden doch sicherlich auch in der Datenbank gespeichert, oder? Dann subtrahiere diese erst einmal von $minuten und berechne nur für das Ergebnis die Gebühr.

          Kommentar


          • #6
            ja die Inklusivminuten sind gespeichert:
            Problem dabei anhand eines Beispiels:
            ($Inklusivminuten - $minuten)*preis
            (100-50)*0,50 --> 25
            das ist okay, da kommt was gescheites raus, aber
            (200-300)*0,50 --> -50

            Folge: Das Modell mit den 200 Inklusivminuten wird an den Anfang gesetzt, obwohl es gar nicht das billigste ist!
            Das eigentliche Problem sind die Vorzeichen, bei version 2 müsste +50 rauskommen, dann wäre das ok.
            Geht ja aber nicht!

            Kommentar


            • #7
              kannst dir per abs() positiv machen lassen

              eagleScripts.de

              Kommentar


              • #8
                Zitat von N!cKY
                kannst dir per abs() positiv machen lassen
                Klar, so werden meine offnen Rechnungen flugs zu Guthaben
                Versuch mal folgendes
                Code:
                SELECT Anbieter, 
                      (if(minutenpreis * $minuten) > inklusivminuten,
                          inklusivminuten,
                          (minutenpreis * $minuten)
                      ) 
                      + grundgebuhr AS preis 
                FROM tabelle 
                ORDER BY preis
                Ungetestet!
                Gruss
                L

                Kommentar


                • #9
                  ah das sieht besser aus!!
                  Ich wusste nicht, dass ich in der MYSQL Syntax if's benutzen kann.
                  Denn anders geht es nicht, weil: Ich muss zwingend zwischen Angboten mit und ohne Inklusivminuten unterscheiden!
                  Sonst verfälscht sich die Rechnung bei den Angeboten, die keine Inklusivminuten haben.
                  Ich versuche das mal ....!

                  DANKE!

                  Kommentar


                  • #10
                    ok, also das ganze wird nix. Ich werde mal im MYSQL Forum den Code der Abfrage posten.

                    Kommentar

                    Lädt...
                    X