Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbank auslesen und per Array sortieren

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

  • Datenbank auslesen und per Array sortieren

    HTML-Code:
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>CALC</title>
    </head>
    
    <body>
    
    <form action="ergebnis.php" method="post">    
      <p>Seiten: <input type="text" name="Seiten">
      Monate: <input type="text" name="Monate"></p>
      <p><input type="submit" name="submit" value="submit"></p>
    
    </form>
    
    </body>
    </html>
    PHP-Code:
    <?php
    DEFINE
    ('host','localhost');
    DEFINE('user','test');
    DEFINE('password','pw');
    DEFINE('db','test');
    $db mysqli_connect(host,user,password,db) or die("unable to connect to database");

    if(!empty(
    $_POST["Seiten"]) && ($_POST["Monate"]) ){
     
    $Seiten $_POST['Seiten'];
     
    $Monate $_POST['Monate'];
     
    $sql "SELECT * FROM test2";

     
    $run mysqli_query($db,$sql);


    while(
    $row mysqli_fetch_assoc($run)){

    $Ergebnis = ((($Seiten $Monate $row['Starter']) / $row['Patrone']) * $row['PreisPatrone']) + $row['Preis'];


     echo 
    "<p>";
     echo 
    $row['Hersteller'];
     echo 
    "&nbsp;";
     echo 
    $row['Name'];
     echo 
    "<br>";
     echo 
    "SEITEN: ";
     echo 
    $Seiten;
     echo 
    "<br>";
     echo 
    "Monate: ";
     echo 
    $Monate;
     echo 
    "<br>";
     echo 
    "Preis: ";
     echo 
    $row['Preis'];
     echo 
    "<br>";
     echo 
    "Starter: ";
     echo 
    $row['Starter'];
     echo 
    "<br>";
     echo 
    "Patrone: ";
     echo 
    $row['Patrone'];
     echo 
    "<br>";
     echo 
    "Rechnung 1: ";
     echo 
    $Seiten $Monate;
     echo 
    "<br>";
     echo 
    "Rechnung 2: ";
     echo 
    $Ergebnis;
     echo 
    "</p>";

     }
    } else {
     echo 
    "Bitte Auswahl treffen / Kein Ergebnis";
    }
    ?>

    Ich habe im Array '$Ergebnis' für jeden einzelnen MySQL - Eintrag etwas ausgerechnet und würde nun die Ausgabe nach diesem Ergebnis sortieren.

    EDIT: hier ein link: http://sellqu.de/calc.php


  • #2
    Um ein Array zu sortieren darfst du es vorab noch nicht ausgeben, du musst es also zwischenspeichern, dann kannst du eine der Sortierfunktionen anwenden und danach gibst du das array aus.

    Kommentar


    • #3
      Warum sortierst Du das nicht da wo es eigentlich gemacht werden sollte? Bei der SQL Abfrage!
      PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

      Kommentar


      • #4
        Zitat von Ulfikado Beitrag anzeigen
        Warum sortierst Du das nicht da wo es eigentlich gemacht werden sollte? Bei der SQL Abfrage!
        Da der Wert, nach dem ich sortieren möchte nicht in der Datenbank steht, kann ich diesen nicht einfach durch ein ORDER BY sortieren lassen.


        Ich weiß nicht, wie ich Arrays zwischenspeichern kann.

        Kommentar


        • #5
          Die DB kann übrigens auch rechnen!

          Sonst ev. noch: http://php.net/manual/en/mysqli-result.fetch-all.php liefert dir alle abgefragen Daten in einem Array.
          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Zitat von Nyqvist Beitrag anzeigen

            Da der Wert, nach dem ich sortieren möchte nicht in der Datenbank steht, kann ich diesen nicht einfach durch ein ORDER BY sortieren lassen.
            Doch das geht mit Alias und ORDER BY, siehe SQLFiddle Beispiel
            Code:
            SELECT `id` , `a` , `b` , ( `a` * ( `b` + 3 )) AS ergebnis
            FROM `foo1`
            WHERE `b` IS NOT NULL
            ORDER BY ergebnis


            Kommentar


            • #7
              Das hat soweit wunderbar geklappt.

              Nur jetzt habe ich noch ein letztes Problem.
              Diese Rechnung darf nicht NULL sein (in diesem Fall ERROR), wenn sie es ist, dann soll mit 0 gerechnet werden.
              Klappt auch tadellos. Nur darf jetzt dieses Ergebnis nicht minus sein, was es jedoch in einigen wenigen fällen ist.
              Also möchte ich alle negativen Werte dieses Ergebnisses auch mit 0 berechnen lassen und alles anschließend addieren.
              Ich hab jetzt 3 Stunden lang alles mögliche ausprobiert...

              PHP-Code:
              $sql "SELECT 
              KName1, KName2, KName3, 
              hersteller, oem, drucken, kopieren, scannen, faxen, 
              Starter1, Starter2, Starter3, Starter4, Starter5, Starter6, Starter7, Starter8, Starter9, Starter10, Starter11, Starter12, 
              KRW1, KRW2, KRW3, KRW4, KRW5, KRW6, KRW7, KRW8, KRW9, KRW10, KRW11, KRW12, 
              KPreis1, KPreis2, KPreis3, KPreis4, KPreis5, KPreis6, KPreis7, KPreis8, KPreis9, KPreis10, KPreis11, KPreis12, 

              IF((((
              $seiten * $monate - Starter1) / KRW1) * KPreis1) IS NULL, 0, ((($seiten * $monate - Starter1) / KRW1) * KPreis1)) AS kgesamt1,
              IF((((
              $seiten * $monate - Starter2) / KRW2) * KPreis2) IS NULL, 0, ((($seiten * $monate - Starter2) / KRW2) * KPreis2)) AS kgesamt2,
              IF((((
              $seiten * $monate - Starter3) / KRW3) * KPreis3) IS NULL, 0, ((($seiten * $monate - Starter3) / KRW3) * KPreis3)) AS kgesamt3,
              IF((((
              $seiten * $monate - Starter4) / KRW4) * KPreis4) IS NULL, 0, ((($seiten * $monate - Starter4) / KRW4) * KPreis4)) AS kgesamt4,


              //-------Dieser Teil funktioniert nicht-------

              IF(kgesamt1 < 0, 0, kgesamt1) + 
              IF(kgesamt2 < 0, 0, kgesamt2) + 
              IF(kgesamt3 < 0, 0, kgesamt3) + 
              IF(kgesamt4 < 0, 0, kgesamt4) 
              AS kgesamt

              //---------------------------------------------

              FROM Drucker 
              WHERE drucken ='
              $drucken' AND kopieren ='$kopieren' AND faxen ='$faxen'
              ORDER BY kgesamt"

              Kommentar


              • #8
                Mach doch statt :
                PHP-Code:

                IF(((($seiten $monate Starter1) / KRW1) * KPreis1IS NULL0, ((($seiten $monate Starter1) / KRW1) * KPreis1)) AS kgesamt1
                ... 
                das:
                PHP-Code:

                IF(((($seiten $monate Starter1) / KRW1) * KPreis1IS NULL OR ((($seiten $monate Starter1) / KRW1) * KPreis1) < 00, ((($seiten $monate Starter1) / KRW1) * KPreis1)) AS kgesamt1
                ... 

                Kommentar


                • #9
                  Du kannst dich im SELECT nicht auf aliase beziehen, du musst die Ausdrücke wiederholen.

                  PS: COALESCE(($seiten * $monate - Starter1) / KRW1 * KPreis1, 0) AS kgesamt1

                  Kommentar

                  Lädt...
                  X